De exemplu putem valida dacă șirul introdus de utilizator este: email, număr de telefon, parolă, cod poștal, doar cifre, doar litere, etc
Dar un mod mai simplu de a valida un șire de caractere este metoda matches() a clasei String care are forma:
Pentru aceasta se folosesc clasele din pachetul java.util.regex:
import java.util.regex.Pattern;
import java.util.regex.Matcher;String.matches("regex");Pentru a construi șablonul trebuie să cunoaștem simbolurile cheie:
Exemplul următor va valida dacă șirul de caractere conține doar cifre. Expresia regulată în acest caz va conține \\d, adică doar cifre, și + ceea ce înseamnă una sau mai multe apariții, deci verificăm dacă în șirul de caractere apare una sau mai multe cifre:
class Testare{
public static void main(String [] args){
String text = "12345";
if (text.matches("\\d+")) {
System.out.println("Codul este valid!");}
else System.out.println("Codul trebuie să conțină doar cifre!");
}}O astfel de verificare este frecvent utilizată în aplicații reale: validarea unui cod numeric, a unui ID, a unui PIN sau a unui număr de ordine.
De exemplu cunoaștem că un code PIN are 4 cifre, deci expresia care va valida dacă șirul de caractere este un cod corecte va conține {} și acesta este:
class Testare{
public static void main(String [] args){
String pin = "2255";
if (pin.matches("\\d{4}")) {
System.out.println("Codul pin valid");
}
}}Exemplul următor va valida dacă șirul de caractere conține doar litere. Expresia regulată în acest caz va conține [a-zA-Z], adică doar litere mari și mici, și semnul + ceea ce înseamnă una sau mai multe apariții, deci verificăm dacă în șirul de caractere apare una sau mai multe litere, fie litere mari, fie litere mici:
class Testare{
public static void main(String [] args){
String text = "ProgramareJava";
if (text.matches("[a-zA-Z]+")) {
System.out.println("Valid - doar litere");
}
}}Următorul exemplu verifică dacă șirul de caractere va conține cel puțin o literă acesta nu va promova validarea:
class Testare{
public static void main(String [] args){
String text = "1F2345";
if (text.matches(".*[a-zA-Z].*")) {
System.out.println("Codul este valid!");}
else System.out.println("Codul trebuie să conțină cel puțin o literă!");
}}
^ - începutul șirului
$ - sfârșitul șirului
De exemplu, vom verifica dacă șirul conține litere și cifre:
class Testare{
public static void main(String [] args){
String text = "Java2026";
if (text.matches("^[a-zA-Z0-9]+$")) {
System.out.println("Valid - doar litere si cifre");
} else {
System.out.println("Invalid");
}
}}De asemenea, în condițiile combinate se folosește (?=…), numit lookahead, care verifică o condiție fără să „consume” textul, adică se uită dacă regula este respectată, dar nu modifică șirul și nu utilizează caracterele verificate, nu-i modifică dimensiunea, astfel încât restul expresiei să poată continua să analizeze întreg șirul.
Următoarele două exemple evidențiază utilitatea lookahead-ului în condiții combinate, dorim să validăm dacă parola conține cel puțin o cifră și minim 6 caractere :
Exemplu fără lookahead
class Testare{
public static void main(String [] args){
String parola = "abc123";
// Regex fără lookahead
// Caută să înceapă cu o cifră, apoi 5 sau mai multe caractere
if (parola.matches("\\d.{6,}")) {
System.out.println("Parola este validă");
} else { System.out.println("Parola NEVALIDĂ");}
}}Deși parola conține cel puțin o cifră și minim 6 caractere, aceasta nu trece testul de validare. Este din motiv că regex fără lookahead caută să înceapă cu o cifră, în caz contrar rezultatul este false.
Exemplu cu lookahead
class Testare{
public static void main(String [] args){
String parola = "abc123";
if (parola.matches("^(?=.*\\d).{6,}$")) {
System.out.println("Parola este validă");
} else { System.out.println("Parola NEVALIDĂ");}
}}class Testare{
public static void main(String [] args){
String email = "test@gmail.com";
if (email.matches("^[A-Za-z0-9+_.-]+@(.+)$")) {
System.out.println("Email valid");
} else { System.out.println("Email nu este valid");}
}}
.matches("^[a-zA-Z0-9_]+$") - verifică dacă expresia conține litere, cifre și underscore, util pentru validare username
.matches("^\\d{6}$") - verifică dacă șase cifre, util pentru verificarea unui cod poștal
.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).{8,}$") - verifică dacă șirul de caractere conține cifre, litere mici, litere mari, util pentru verificarea unei parole mai complexe
.matches("^[A-Za-z].*$") - verifică dacă șirul de caractere începe cu o litera
.matches(".*\\d$") - verifică dacă șirul de caractere finisează cu o cifră
.matches("^\\d+(\\.\\d+)?$") - verifică dacă șirul de caractere este un număr zecimal. Va accepta de exemplu 10, la fel și 10.5. Nu va accepta litere
.matches("^[A-Za-z][A-Za-z0-9_]*$") - verifică dacă șirul de caractere începe cu o literă după care urmează litere, cifre sau semnul underscore
Expresiile regulate sunt foarte utile în programare, oferind o metodă rapidă și precisă pentru verificarea și manipularea șirurilor de caractere, astfel asigurând securitatea datelor cu care lucrează aplicația.
Îți dorești un anumit conținut să apară în această postare?
Vezi meniul 👉 CONTACTE
Aștept un e-mail 💬
Succes!
❤️