Come configurare smartphone e PC. Portale informativo
  • casa
  • Televisori (Smart TV)
  • Numeri di corrispondenza preg Php. PHP (espressione regolare) - che cos'è? Esempi di espressioni regolari e convalida

Numeri di corrispondenza preg Php. PHP (espressione regolare) - che cos'è? Esempi di espressioni regolari e convalida

Quando si lavora con testi in qualsiasi linguaggio di programmazione moderno, gli sviluppatori devono costantemente affrontare il compito di verificare la conformità dei dati inseriti con il modello desiderato, trovare e sostituire frammenti di test e altre operazioni tipiche per l'elaborazione di informazioni simboliche. Lo sviluppo dei propri algoritmi di verifica comporta perdite di tempo, incompatibilità del codice del programma e complessità nel suo sviluppo e modernizzazione.

Il rapido sviluppo di Internet e dei linguaggi di sviluppo WEB ha richiesto la creazione di strumenti universali e compatti per l'elaborazione di informazioni di testo con una quantità minima di codice richiesta per questo. Il linguaggio PHP, popolare tra i principianti e gli sviluppatori professionisti, non fa eccezione. L'espressione regolare come linguaggio di modelli di testo consente di semplificare le attività di elaborazione del testo e ridurre il codice del programma di decine e centinaia di righe. Molti compiti sono generalmente impossibili da risolvere senza di essa.

Espressioni regolari in PHP

Il linguaggio PHP contiene tre meccanismi per lavorare con le espressioni regolari: "ereg", "mb_ereg" e "preg". La più comune è l'interfaccia "preg", le cui funzioni forniscono l'accesso alla libreria di supporto per le espressioni regolari PCRE, originariamente sviluppata per il linguaggio Perl, che è in bundle con PHP. Le funzioni Preg cercano le corrispondenze in una determinata stringa di testo, secondo un modello specifico nel linguaggio delle espressioni regolari.

Nozioni di base sulla sintassi

Nell'ambito di un breve articolo, è impossibile descrivere in dettaglio l'intera sintassi delle espressioni regolari; esiste una letteratura speciale per questo. Forniremo solo gli elementi principali per mostrare le ampie possibilità per lo sviluppatore e comprendere gli esempi di codice.

B è formalmente definito molto difficile, quindi semplificheremo la descrizione. L'espressione regolare è una stringa di testo. Consiste in un pattern delimitato e un modificatore che indica come elaborarlo. È possibile includere varie alternative e ripetizioni nei modelli.

Ad esempio, nell'espressione /\d(3)-\d(2)-\d(2)/m il delimitatore sarà «/» , seguito dal motivo e dal simbolo "m" sarà un modificatore.

Tutta la potenza delle espressioni regolari è codificata con metacaratteri. Il metacarattere principale della lingua è la barra rovesciata - "\". Inverte il tipo del carattere che lo segue (cioè un carattere regolare diventa un metacarattere e viceversa). Un altro importante metacarattere è la barra "|", che specifica modelli alternativi. Altri esempi di metacaratteri:

PHP, durante l'elaborazione di espressioni regolari, tratta uno spazio come un carattere significativo separato, quindi le espressioni ABCWHERE e ABCWHERE sono diverse.

Sottomodelli

In PHP, i sottopattern regolari sono distinti da parentesi e sono talvolta indicati come "sottoespressioni". Eseguire le seguenti funzioni:

    Selezione di alternative. Ad esempio, modello calore(qualche|uccello|) corrisponde alle parole "calore", "uccello di fuoco" e "arrosto". E senza parentesi, sarà solo una stringa vuota, "uccello" e "caldo".

    Sottomodello "Emozionante". Ciò significa che se una sottostringa corrisponde nel modello, come risultato vengono restituite tutte le corrispondenze. Per chiarezza, facciamo un esempio. Data la seguente espressione regolare: il vincitore riceve ((oro|dorato)(medaglia|coppa)) - e una stringa per cercare le corrispondenze: "il vincitore ottiene la medaglia d'oro". Oltre alla frase originale, la ricerca risulterà in: "medaglia d'oro", "medaglia", "oro".

Operatori di ripetizione (quadificatori)

Quando si compilano espressioni regolari, molto spesso è necessario analizzare le ripetizioni di numeri e caratteri. Questo non è un problema se non ci sono molte ripetizioni. Ma cosa fare quando non conosciamo il loro numero esatto? In questo caso, devono essere utilizzati metacaratteri speciali.

Per descrivere le ripetizioni, vengono utilizzati i quadrificatori: metacaratteri per impostare la quantità. I quadificatori sono di due tipi:

  • generale, racchiuso tra parentesi;
  • abbreviato.

Il quantificatore generale specifica il numero minimo e massimo di ripetizioni consentite dell'elemento come due numeri tra parentesi graffe, come questo: x(2.5). Se il numero massimo di ripetizioni è sconosciuto, il secondo argomento viene omesso: x(2,).

I quantificatori abbreviati sono simboli per le ripetizioni più comuni per evitare di sovraccaricare la sintassi. Sono comunemente usate tre abbreviazioni:

1. * - zero o più ripetizioni, che equivale a (0,).

2. + - una o più ripetizioni, cioè).

3.? - zero o solo una ripetizione - (0,1).

Esempi di espressioni regolari

Per coloro che stanno imparando le espressioni regolari, gli esempi sono il miglior tutorial. Eccone alcuni che mostrano il loro grande potenziale con il minimo sforzo. Tutti i codici di programmazione sono completamente compatibili con le versioni PHP 4.x e successive. Per una completa comprensione della sintassi e l'utilizzo di tutte le caratteristiche del linguaggio, consigliamo il libro Regular Expressions di J. Friedl, dove la sintassi è completamente trattata e ci sono esempi di espressioni regolari non solo in PHP, ma anche per Python, Perl, MySQL, Java, Ruby e C#.

Verifica della correttezza dell'indirizzo e-mail

Un compito. C'è una pagina web che chiede al visitatore un indirizzo email. L'espressione regolare dovrebbe verificare se l'indirizzo ricevuto è corretto prima di inviare i messaggi. Il controllo non garantisce che la casella di posta specificata esista davvero e accetti le lettere. Ma può eliminare gli indirizzi deliberatamente sbagliati.

Soluzione. Come con qualsiasi linguaggio di programmazione, le espressioni regolari di convalida degli indirizzi e-mail possono essere implementate in PHP in vari modi e gli esempi in questo articolo non intendono essere l'unica opzione finale. Pertanto, in ogni caso, forniremo un elenco di requisiti che devono essere presi in considerazione durante la programmazione e l'implementazione specifica dipende completamente dallo sviluppatore.

Quindi, l'espressione che controlla la validità dell'e-mail dovrebbe verificare le seguenti condizioni:

  1. La presenza del simbolo @ nella stringa di origine e l'assenza di spazi.
  2. La parte di dominio dell'indirizzo, dopo il simbolo @, contiene solo caratteri validi per i nomi di dominio. Lo stesso vale per il nome utente.
  3. Quando si convalida un nome utente, è necessario rilevare la presenza di caratteri speciali, come un apostrofo o tali caratteri sono potenzialmente pericolosi e possono essere contenuti in attacchi come le iniezioni SQL. Evita tali indirizzi.
  4. I nomi utente consentono un solo punto, che non può essere il primo o l'ultimo carattere di una stringa.
  5. Il nome a dominio deve contenere almeno due e non più di sei caratteri.

Un esempio che tiene conto di tutte queste condizioni può essere visto nella figura seguente.

Convalida gli URL

Un compito. Verifica se una determinata stringa di testo è valida Anche in questo caso, le espressioni regolari di convalida degli URL possono essere implementate in vari modi.

Soluzione. La nostra versione finale si presenta così:

/^(https?:\/\/)?([\da-z\.-]+)\.((2,6))([\/\w \.-]*)*\/?$ /

Ora analizziamo i suoi componenti in modo più dettagliato, usando la figura.

Controllo dei numeri di carta di credito

Un compito.È necessario implementare la verifica della correttezza del numero di carta plastica inserito dei più comuni sistemi di pagamento. Solo opzione mappa considerata

Soluzione. Quando si crea un'espressione, è necessario tenere conto della possibile presenza di spazi nel numero inserito. Le cifre del numero sulla tessera sono divise in gruppi per facilitare la lettura e la dettatura. Pertanto, è del tutto naturale che una persona possa provare a inserire un numero in questo modo (cioè usando gli spazi).

Scrivere un'espressione generica che tenga conto dei possibili spazi e trattini è più difficile che scartare semplicemente tutti i caratteri tranne i numeri. Pertanto, si consiglia di utilizzare il metacarattere /D nell'espressione, che rimuove tutti i caratteri tranne le cifre.

Ora puoi andare direttamente a controllare il numero. Tutte le società di carte di credito utilizzano un formato numerico univoco. L'esempio utilizza questo e il cliente non ha bisogno di inserire il nome dell'azienda: è determinato dal numero. Le carte Visa iniziano sempre con 4 e sono lunghe 13 o 16 cifre. MasterCard inizia nell'intervallo 51-55 con una lunghezza del numero di 16. Di conseguenza, otteniamo la seguente espressione:

Prima di elaborare l'ordine, puoi inoltre controllare l'ultima cifra del numero, che viene calcolata utilizzando l'algoritmo Luhn.

Controllo dei numeri di telefono

Un compito. Verifica della correttezza del numero di telefono inserito.

Soluzione. Il numero di cifre nei numeri di rete fissa e mobile varia notevolmente da paese a paese, quindi non è possibile convalidare universalmente un numero di telefono utilizzando espressioni regolari. Ma i numeri internazionali hanno un formato rigoroso e sono ottimi per il controllo dei modelli. Inoltre, sempre più operatori telefonici nazionali stanno cercando di rispettare un unico standard. La struttura del numero è la seguente:

+CCC.NNNNNNNNNNxEEEE, dove:

C è un prefisso internazionale a 1-3 cifre.

N - numero lungo fino a 14 cifre.

E è un'estensione opzionale.

Il segno più è un elemento obbligatorio e il segno x è presente solo quando è necessaria un'estensione.

Di conseguenza, abbiamo la seguente espressione:

^\+(1,3)\.(4,14)(?:x.+)?$

Numeri in un intervallo

Un compito.È necessario assicurarsi che un numero intero di un determinato intervallo corrisponda. Inoltre, è necessario che le espressioni regolari trovino solo numeri da un intervallo di valori.

Soluzione. Ecco alcune espressioni per alcuni dei casi più comuni:

Ricerca dell'indirizzo IP

Un compito.È necessario determinare se la stringa specificata è un indirizzo IP valido in formato IPv4 nell'intervallo 000.000.000.000-255.255.255.255.

Soluzione. Come con qualsiasi attività PHP, un'espressione regolare ha molte varianti. Ad esempio, questo:

Verifica online delle espressioni

Controllare la correttezza delle espressioni regolari può essere difficile per i programmatori inesperti a causa della complessità della sintassi, che differisce dai linguaggi di programmazione "normali". Per risolvere questo problema, esistono molti tester di espressioni online che semplificano la verifica della correttezza del modello creato su testo reale. Il programmatore inserisce un'espressione e dati per la verifica e vede immediatamente il risultato dell'elaborazione. Solitamente è presente anche una sezione di riferimento, che descrive in dettaglio espressioni regolari, esempi e differenze di implementazione per i più comuni linguaggi di programmazione.

Ma non è consigliabile fidarsi completamente dei risultati dei servizi online per tutti gli sviluppatori che utilizzano PHP. Un'espressione regolare scritta e testata personalmente migliora le capacità e assicura che non ci siano errori.

L'uso più comune delle espressioni regolari in Perl è nella ricerca e nella sostituzione di operatori come S//, m/, collegano gli operatori =~ o != eccetera. Di norma, tutti questi operatori hanno opzioni simili come:

Di solito tutte queste opzioni sono indicate come "/x". Possono essere utilizzati anche all'interno di modelli utilizzando la nuova costruzione (?...)

Le espressioni regolari o i modelli (modello) sono gli stessi delle procedure regexp in Unix. Le espressioni e la sintassi sono prese in prestito dalle routine V8 distribuite liberamente da Henry Spencer e qui descritte in dettaglio.

I modelli utilizzano i seguenti metacaratteri (caratteri che denotano gruppi di altri caratteri) spesso indicati come standard egrep:

I metacaratteri hanno modificatori (scritti dopo il metacarattere):

In tutti gli altri casi, le parentesi graffe vengono trattate come caratteri ordinari (regolari). Quindi "*" equivale a (0,) , "+" a (1,) e "?" - (0,1). n e m non possono essere maggiori di 65536.

L'azione predefinita dei metacaratteri è "greedy". La corrispondenza viene estesa quante più volte possibile, indipendentemente dal risultato dei seguenti metacaratteri. Se vuoi "ridurre l'appetito", usa il carattere "?". Non cambia il significato dei metacaratteri, riduce solo lo spread. In questo modo:

I motivi funzionano allo stesso modo delle virgolette doppie, quindi puoi usare `\` - caratteri (caratteri barra rovesciata) al loro interno:

\T - carattere di tabulazione
\n - nuova linea
\R - un ritorno in carrozza
\ma - traduzione del formato
\v - linguetta verticale
\un - chiamata
\e - fuga
\033 - notazione dei caratteri ottali
\x1A - esadecimale
\C[ - simbolo di controllo
\l - carattere successivo minuscolo
\u - maiuscolo -//-
\L - tutti i caratteri minuscoli fino a \E
\U - In cima -//-
\E - limitatore di cambio caso
\Q - Annulla azione come metacarattere

Inoltre, i seguenti metacaratteri sono stati aggiunti a Perl:

Nota che questo è tutto "uno" carattere. Usa i modificatori per designare una sequenza. Così:

Inoltre, ci sono metacaratteri immaginari. Indicando caratteri inesistenti al posto del cambio di valore. Come:

La parola limite (\b) è il punto immaginario tra i caratteri \w e \W. All'interno di una classe di caratteri, "\b" indica un carattere backspace (cancella). Metacaratteri \UN e \Z- simile a "^" e "$", ma se l'inizio della riga "^" e la fine della riga "$" sono validi per ogni riga nella stringa multilinea, allora \UN e \Z indicare l'inizio e la fine dell'intera stringa multilinea.

Se il raggruppamento (parentesi) viene utilizzato all'interno del modello, il numero della sottostringa del gruppo viene indicato come "\numero". Si noti che seguendo lo schema all'interno di un'espressione o di un blocco, questi gruppi sono indicati come "$numero". Inoltre, ci sono ulteriori variabili:

Esempio:

$s = "Uno 1 due 2 e tre 3"; if ($s =~ /(\d+)\D+(\d+)/) ( print "$1\n"; # Risultato "1" print "$2\n"; # "2" print "$+\n" ; # "2" print "$&\n"; # "1 due 2" print "$`\n"; # "Uno " print "$"\n"; # " e tre 3" )

Perl versione 5 contiene costrutti di modelli aggiuntivi:

Esempio:

$s = "1+2-3*4"; if ($s =~ /(\d)(?=-)/) # Trova la cifra seguita da "-" ( print "$1\n"; # Il risultato è "2" ) else ( print "ricerca non riuscita\n " ; )

(?! modello) - "sbirciando" in avanti per negazione:

Esempio:

$s = "1+2-3*4"; if ($s =~ /(\d)(?!\+)/) # Trova una cifra non seguita da "+" ( print "$1\n"; # Il risultato è "2" ) else ( print "cerca fallito\ n"; )

(?ismx) - modificatori "interni". È comodo da usare nei modelli, dove, ad esempio, è necessario specificare un modificatore all'interno del modello.

Regole delle espressioni regolari. (regex)

  1. Qualsiasi personaggio rappresenta se stesso, a meno che non sia un metacarattere. Se devi annullare un metacarattere, fallo precedere da "\".
  2. Una stringa di caratteri denota una stringa di quei caratteri.
  3. L'insieme dei possibili caratteri (classe) è racchiuso tra parentesi quadre "", il che significa che uno dei caratteri indicati tra parentesi può essere in questo posto. Se il primo carattere tra parentesi è "^", nessuno dei caratteri specificati può trovarsi in questa posizione nell'espressione. All'interno di una classe, puoi utilizzare il carattere "-" per designare un intervallo di caratteri. Ad esempio, a-z è una delle lettere minuscole dell'alfabeto latino, 0-9 è un numero e così via.
  4. Forum del portale PHP. SU

Le espressioni regolari sono uno strumento di elaborazione delle stringhe molto potente, ma allo stesso tempo difficile da capire. Descriverò i punti principali. Un'espressione regolare è un modello di stringa. Secondo questo modello, puoi cercare occorrenze, effettuare una sostituzione, verificare la conformità con il modello.

Regole per la stesura di un modello (modello)

I confini del modello devono essere indicati da determinati caratteri, spesso usando " / ", ma preferisco usare " # " perché l'abbondanza di tagli avanti / indietro può caricare negli occhi e i "reticoli" di solito non vengono utilizzati da nessun'altra parte. Quindi: " #HereRegularExpressionBody#"

Le parentesi vengono utilizzate all'interno dell'espressione regolare: si tratta di sottoespressioni che possono essere manipolate, ad esempio:

#^/catalog/(+)/(+)\.html.*#

Questa espressione ha lo scopo di ricevere parametri in una stringa URL. All'inizio della riga c'è un carattere speciale " ^ " - questo significa l'inizio della riga. Poi viene " /Catalogare/" - non ci sono caratteri speciali qui, è solo testo che dovrebbe essere contenuto nella riga. Quindi abbiamo incontrato le parentesi, cioè siamo arrivati ​​alla prima sottoespressione. Le parentesi quadre indicano l'insieme di caratteri che possono essere nella riga in questo posto. Firma " - " significa enumerazione. Segno " \ " sfugge ai caratteri speciali. Pertanto, nella prima sottoespressione possiamo avere lettere GRANDI e minuscole dell'alfabeto latino, numeri da 0 a 9, un trattino basso, un trattino e un punto. Un trattino e un punto sono caratteri speciali, ma qui sono sfuggiti, quindi qui ci sono solo caratteri. Dopo le parentesi quadre arriva il segno " + " - questo significa che il carattere precedente (e abbiamo questo set di caratteri indicato tra parentesi quadre) può andare 1 o più volte. Poi arriva " / " è solo un carattere e una seconda sottoespressione simile. Poi arriva " \.html"che significa il testo" .html". E poi caratteri speciali " .* " un punto indica qualsiasi carattere e un asterisco qualsiasi numero del carattere precedente. Cioè, dopo " .html"Tutto può andare.

Specificando quantità, quantificatori

Sopra, abbiamo già considerato tali simboli che indicano il numero di simboli precedenti, come ad esempio + e * . Ecco tutte le possibilità per specificare la quantità:

Personaggi speciali

Esistono abbreviazioni speciali per alcuni gruppi di caratteri:

"Avidità"

Considera il concetto di avidità di espressione regolare. Ad esempio c'è una riga:

#()#

Lettura: sottoespressione:

Tutto sembra essere corretto, la sottoespressione rientra in:

Ma si adatta anche:

Lo otterremo, perché. le espressioni regolari sono "greedy" per impostazione predefinita. Puoi rimuovere l'avidità con il modificatore " u", come questo:

#()#U

Modificatori

Le espressioni regolari possono essere seguite da modificatori: " #HereRegularExpressionBody#HereModifiers"Tipi di modificatori:

io Abilita la modalità senza distinzione tra maiuscole e minuscole, ad es. le lettere maiuscole e minuscole nell'espressione non differiscono.
m Indica che il testo cercato deve essere trattato come più righe. Per impostazione predefinita, il motore delle espressioni regolari tratta il testo come una singola riga, indipendentemente da cosa sia effettivamente. Di conseguenza, metacaratteri "^" e "$" indicare l'inizio e la fine dell'intero testo. Se viene specificato questo modificatore, punteranno rispettivamente all'inizio e alla fine di ogni riga di testo.
S Il metacarattere predefinito è " . " non include un carattere di nuova riga nella sua definizione. Specificando questo modificatore si rimuove questa limitazione.
u Rimuove l'avidità di un'espressione regolare
tu Consente l'utilizzo di espressioni regolari Da cirillico a UTF-8 altrimenti non funziona correttamente.

funzioni php per lavorare con le espressioni regolari

preg_replace

Cerca e sostituisci:

preg_replace (misti $pattern , misti $sostituzione , misti $soggetto [, int $limit = -1 [, int &$count ]]);

Ogni valore può essere una stringa o un array, nel caso $soggetto array - viene restituito un array, altrimenti una stringa

preg_split

Divide una stringa per espressione regolare:

preg_split(stringa $modello, stringa $oggetto [, int $limite = -1 [, int $flags = 0]]);

Restituisce una matrice composta da sottostringhe della stringa data argomento, che viene suddiviso lungo i contorni che corrispondono al modello modello.

Cominciamo con cos'è un'espressione regolare. Ora rispondi alla mia domanda, c'è una "e" nella parola "test"? "C'è!" tu dici. Poi ti faccio la seconda domanda, come hai trovato la lettera "e" nella parola "test"? La risposta è ovvia, prendiamo il primo carattere, cioè "t" e lo confrontiamo con quello che stiamo cercando, cioè con "e". Se non sono uguali, prendiamo il secondo carattere, cioè "e", lo confrontiamo con quello che stiamo cercando, cioè "e". Ecco! Trovata una corrispondenza. Risposta: C'è una "e" nella parola "test".

Ora rispondimi un'altra domanda, dov'è l'espressione regolare in questo esempio? Spero che tu abbia indovinato che l'espressione regolare qui è ciò che stiamo cercando nella parola "test". Cioè, la lettera "e" in questo esempio è un'espressione regolare.

Perché usare le espressioni regolari in php? Nella mia pratica, le espressioni regolari sono state utilizzate, ad esempio, per determinare se un indirizzo e-mail è ben formato. Inoltre, tali espressioni vengono utilizzate per determinare la correttezza del nome utente e della password. Usando le espressioni regolari, puoi trovare l'indirizzo nel link e salvarlo. Molte cose che puoi fare Dopo aver analizzato questo, puoi identificare la funzione principale delle espressioni regolari e due laterali. Funzione principale, è una ricerca di corrispondenze in una stringa. Quelli secondari sono il salvataggio delle partite trovate e la sostituzione.

Prima espressione regolare

In teoria, capiamo come trovare il carattere "e" nella parola "test", come viene implementato nella pratica? Per utilizzare le espressioni regolari in php, vengono solitamente utilizzate le seguenti funzioni:

preg_match("espressione regolare (modello)", "variabile in cui viene eseguita la ricerca", "Variabile in cui è memorizzato il risultato della ricerca (parametro opzionale)"); - Funzione di corrispondenza
preg_replace("espressione regolare (modello)", "Con cosa sostituire la corrispondenza", "variabile da sostituire"); - Sostituisci funzione

Iniziamo a usare queste funzioni. Ecco un esempio di ricerca del carattere "e" nella parola "test":

$a = "prova";
if(preg_match("/e/",$a)) echo "trovato!!";

Il codice descrive la condizione, se qualcosa in base allo schema viene trovato nella variabile $a, quindi visualizza il messaggio "trovato!!" Come puoi vedere il nostro schema è tra due "/". In questo caso, il carattere "/" simboleggia l'inizio e la fine del nostro modello. Spero che questo sia chiaro.

Tutto questo è ovviamente interessante ... ma questo è solo il nostro modello, che è molto semplice, non credi? Dopotutto, raramente abbiamo bisogno di trovare un carattere in una variabile. Nella maggior parte dei casi, dobbiamo trovare molti personaggi, e anche sconosciuti. Come essere? Poniamoci un problema e cerchiamo di risolverlo. Supponiamo di avere una stringa composta da numeri e una lettera inglese sconosciuta

Come trovare questa lettera? Può esserci qualsiasi lettera dell'alfabeto inglese, come determinarla? Hai risposto alla tua stessa domanda, c'è una lettera, cioè è nell'intervallo da a a z. Gli intervalli possono essere utilizzati nelle espressioni regolari. Se non sappiamo quale carattere stiamo cercando, ma sappiamo per certo che questo carattere è una lettera dell'alfabeto inglese, la voce sarà la seguente:

$a = "123a321";
if(preg_match("//",$a)) echo "trovato!!";

Si noti che l'intervallo è racchiuso tra parentesi "[" "]". Tutto ciò che è racchiuso tra tali parentesi è definito come uno carattere, in questo caso il carattere va da a a z. Se abbiamo bisogno di trovare non una lettera, ma un numero, la voce sarà così:

$a = "abc1cba";
if(preg_match("//",$a)) echo "trovato!!";

Voglio anche notare che le espressioni regolari fanno distinzione tra maiuscole e minuscole, quindi i caratteri "A" e "a" sono completamente diversi, per cercare quelli e quei caratteri, scrivono in questo modo:

$a = "123a321";
if(preg_match("//",$a)) echo "trovato!!";

C'è anche una ricerca di lettere russe, eseguita allo stesso modo dell'inglese:

$a = "123y321";
if(preg_match("/[a-zA-Z]/",$a)) echo "trovato!!";

Metacaratteri

Abbiamo imparato come cercare un carattere sconosciuto in una stringa. Cosa fare se dobbiamo trovare più personaggi? I cosiddetti metacaratteri vengono in soccorso... Supponiamo di avere una stringa con numeri, lettere, come descriverla in un template? È possibile così:

linea - 123a321
campione -

Hmm... il modello si adatta davvero alla nostra stringa e, una volta verificato la conformità, darà il tanto atteso vero! Ma che disco ingombrante, non credi?

Ecco come puoi accorciarlo:

linea - 123a321
campione - *

Mi sembra così breve Qual è il simbolo "*"? Questo è lo stesso metacarattere, significa che il carattere che abbiamo descritto (ovvero un carattere che può contenere numeri da 0 a 9 o lettere dell'alfabeto inglese, dalla a alla z) può essere ripetuto all'infinito, o più di una volta. Si si! Questo metacarattere troverà una corrispondenza in una variabile vuota, poiché anche l'assenza del personaggio che abbiamo descritto tornerà true! Ricordalo

Quali altri metacaratteri ci sono?

Ad esempio, il metacarattere "+" È quasi uguale al metacarattere "*" con una piccola eccezione. "*" restituirà true anche se non è presente alcun carattere e "+" verificherà la presenza di almeno un carattere. Cioè, se la stringa richiede la presenza minimo un singolo carattere quindi usa "+" invece di "*"

Viene spesso utilizzato anche il metacarattere "?". Significa che non dovrebbe esserci più di un carattere di ricerca nella stringa. Lascia che ti dia un paio di esempi per gli ultimi due metacaratteri che ho descritto.

Supponiamo di dover controllare la correttezza della password dell'utente. Pensiamo a cosa dovrebbe contenere la password dell'utente? Bene, in primo luogo, deve essere almeno un carattere. In secondo luogo, deve contenere solo numeri e lettere dell'alfabeto inglese, quindi l'espressione regolare sarà simile a questa:

$a = "qwerty12345";

Quali caratteri consentiamo? Lettere inglesi di ogni caso e numeri. Ora prova a lasciare una riga vuota al posto della password.

$a = "";
if(preg_match("/+/",$a)) echo "La password è corretta";

Non vedrai il messaggio "Password corretta". Come mai? Perché il metacarattere "+" ha controllato la stringa per almeno un carattere.

E ora un piccolo trucco, diamo un'occhiata alla nostra espressione, non ce lo abbiamo permesso, diciamo uno spazio, giusto? metti uno spazio alla fine della password ed esegui

$a = "qwerty12345";
if(preg_match("/+/",$a)) echo "La password è corretta";

E perché vediamo il nostro messaggio di password corretta? È piuttosto semplice... Funzione preg_match(); interrompe il controllo alla prima corrispondenza. Cioè, il carattere "q" si adatta allo schema che abbiamo descritto e tutto il resto non è più importante per la funzione. Cosa fare? Ecco come risolverlo:

$a = "qwerty12345";
if(preg_match("/^+$/",$a)) echo "La password è corretta";

Aggiungendo "^" all'inizio dell'espressione e "$" alla fine, diciamo alla funzione che il modello deve corrispondere tutti linea. Se esegui questo codice, non vedrai il messaggio, perché c'è un carattere non valido alla fine della password: uno spazio

Ora cambia il metacarattere "+" nel metacarattere "?". Cosa pensi che succederà? Correttamente, non ci sarà alcun messaggio sulla correttezza della password, poiché la password contiene più di un carattere. Spero di aver spiegato correttamente il lavoro di questi tre metacaratteri usati di frequente

A volte "non" è meglio

Almeno abbiamo imparato a controllare la correttezza della password, e va bene! Lascia che ti parli di un altro modo per cercare qualcosa in una stringa. Diciamo che dobbiamo controllare l'assenza di numeri nella stringa. Come farlo? Ecco la linea:

(Ho deliberatamente introdotto questi caratteri "-_+()" in modo che la vita non sembri miele ...) Potremmo scrivere la seguente espressione:

Ma devi ammettere, perché non sempre sappiamo quali caratteri vengono utilizzati nella stringa, ma sappiamo per certo che non dovrebbero esserci numeri in essa! Sarebbe più logico scrivere semplicemente un modello che salti le righe in cui No cifre, non quelle in cui "Oh mio Dio, quanti personaggi incomprensibili!!!". Ecco un esempio di un'espressione composta correttamente per tali attività:

$a = "a-_+()";
if(preg_match("/^[^0-9]+$/",$a)) echo "Nessuna cifra!";

Come siamo riusciti a raggiungere questo obiettivo? Abbiamo inserito il simbolo ma! il "^" finale ([^0-9]) all'inizio indica che questo carattere sarà nella stringa non dovrebbe Spero che questo sia risolto

Bene, chiudiamo piano piano... Farò due esempi con spiegazioni, durante i quali impareremo come memorizzare il risultato della ricerca in una variabile, e come verificare la correttezza dell'indirizzo mail

L'ho visto, l'ho salvato!

Il mio blog

$a = " Il mio blog";
preg_match("/ /", $a);

Nella nostra espressione regolare abbiamo descritto tutti i possibili caratteri che possono essere inclusi nel collegamento. Voglio anche prestare attenzione ai caratteri delle virgolette e "/" nella nostra espressione .. Sono preceduti da una barra rovesciata, a cosa serve? La questione è che "/" e una virgoletta di per sé caratteri speciali. E affinché il modello li percepisca come personaggi ordinari, dobbiamo selezionarli. Lo screening viene eseguito aggiungendo una barra rovesciata prima dei caratteri speciali. Spero sia chiaro

$a = " Il mio blog";
preg_match("/ /", $a, $b);

Bene, di conseguenza, è necessario aggiungere un parametro aggiuntivo sotto forma di una variabile $b, il collegamento trovato verrà archiviato in esso. Devi anche sapere che il risultato della ricerca è inserito in un array. Quindi la variabile $b è un array. Le informazioni che stiamo cercando si trovano all'indice 1. Ciò significa che il risultato della ricerca è nella variabile $b. Mostriamo il risultato sullo schermo:

$a = " Il mio blog";
preg_match("/ /", $a, $b);
eco $b;

L'indirizzo giusto è la chiave del successo!

E infine, la risposta alla domanda, l'e-mail è corretta? Innanzitutto, devi sapere quali caratteri sono consentiti negli indirizzi? Per quanto ne so, i caratteri consentiti includono:

  • Lettere inglesi, numeri, "_", "-" ummm, tutto sembra essere ... Procediamo da questo.
  • Successivamente abbiamo "@"
  • Dopo, lettere inglesi
  • Poi, punto
  • E ancora, lettere inglesi ...

Quindi l'espressione regolare sarebbe:

$a = " [email protetta]";
if(preg_match("/^ [email protetta]+.+$/", $a)) echo "indirizzo email corretto!";
else echo "l'indirizzo email NON è corretto!";

Bene ... spero che tali record non ti spaventino ora e tu possa capirli abbastanza.

Infine, voglio dire una cosa. L'articolo si è rivelato ingombrante e allo stesso tempo ha coperto solo una parte delle possibilità. Se stai leggendo questa frase, molto probabilmente l'hai letta fino alla fine, da cui ti ringraziamo molto

Per quanto riguarda la serie di articoli sullo sviluppo dei blog cms, la prima parte del ciclo annuncio chiuso! Nel prossimo futuro inizieremo a implementare il pannello di amministrazione, quindi non "cambiare" Se hai domande, sarò felice di rispondere. Tutto il meglio per te, ho tutto!

Articoli correlati in alto