281 Shares 4077 views

PHP (regex) – che cos'è? Esempi e controllo espressioni regolari

Quando si lavora con il testo in qualsiasi linguaggio di programmazione moderno, gli sviluppatori costantemente si incontrano con gli obiettivi di convalida dell'input per la conformità con il modello desiderato, cercare e sostituire frammenti di prova e di altri tipi di operazioni di trattamento dei dati di carattere. Sviluppare i propri algoritmi di validazione porta alla perdita di tempo, la compatibilità del codice e la complessità nel suo sviluppo e la modernizzazione.

Il rapido sviluppo dei linguaggi di Internet e web-design richiesto la creazione di mezzi versatili e compatti di elaborazione del testo con un importo minimo richiesto per questo codice. E non fa eccezione ed è popolare tra i principianti e gli sviluppatori professionisti del linguaggio PHP. Il linguaggio delle espressioni regolari, come i modelli di testo per semplificare il compito di gestire il testo e ridurre il codice per decine e centinaia di linee. Molti problemi non possono essere risolti a tutti, senza di esso.

Espressioni regolari in PHP

linguaggio PHP ha tre meccanismi per lavorare con le espressioni regolari – «ereg», «mb_ereg» e «preg». Il più comune è l'interfaccia «preg», le cui funzioni fornire l'accesso alla biblioteca del supporto alle espressioni regolari PCRE, originariamente sviluppato per il linguaggio Perl, che è incluso nel pacchetto PHP. funzioni in una determinata stringa di testo corrispondente pregnenolone in cerca, in base a un determinato modello nel linguaggio delle espressioni regolari.

Nozioni di base di sintassi

Come parte di un breve articolo è impossibile descrivere in dettaglio l'intera sintassi delle espressioni regolari, per questo c'è una letteratura speciale. Vi presentiamo solo gli elementi principali per mostrare le opportunità di sviluppo e di comprendere gli esempi di codice.

In PHP espressione regolare è definita formalmente molto difficile, e quindi semplificare la descrizione. Un'espressione regolare è una stringa di testo. Consiste in un modello separatore dedicato e il modificatore indica il modo di gestirlo. Possibile inserimento nelle varie alternative e ripetizioni di schemi.

Ad esempio, nell'espressione / d {3} – d {2} – d {2} / m divisore è "/", seguito dal modello e il simbolo «m» è il modificatore.

Tutta la potenza delle espressioni regolari è codificato utilizzando meta-caratteri. Il metacarattere lingua principale è il backslash – "". Cambia il tipo di seguenti caratteri sul lato opposto (cioè. E. convertiti in un carattere jolly ordinario e viceversa). Un altro metacarattere importante è una linea retta «|», specifica il modello alternativo. Altri esempi di meta-caratteri:

^ Object start o una stringa
( Start subpattern
) fine subpattern
{ Inizio quantificatore
} fine quantificatore
d cifra decimale da 0 a 9
D qualsiasi carattere che non è un numero
s simbolo vuoto, spazio, tab,
w dizionario di simboli

PHP, l'elaborazione di espressioni regolari, lo spazio considerato come un carattere valido separata, quindi l'espressione di XYZ e ABC dove sono diversi.

sotto-regole

In PHP sottopattern regolari da parte di parentesi, e sono a volte chiamati "sottoespressioni". Eseguire le seguenti funzioni:

  1. alternative assegnazione. Ad esempio, il modello di calore (qualcosa | Uccelli |) coincide con il "calore" parole "Firebird" e "caldo". E senza le parentesi sarà solo una stringa vuota, "uccello" e "caldo".

  2. sotto-pattern "spettacolare". Ciò significa che se il modello abbinato stringa, poi ritorna tutte le partite. Per chiarezza, diamo un esempio. Data la seguente espressione regolare: il vincitore riceve ((oro | placcato in oro) (medaglia | tazza)) – e la stringa per le partite "il vincitore ottiene una medaglia d'oro." Oltre alla frase iniziale, saranno emessi i risultati della ricerca: "Medaglia d'oro", "medaglie", "oro".

Operatori ripetizioni (kvadrifikatory)

Nel compilare l'espressione regolare è spesso necessario analizzare la ripetizione di numeri e simboli. Questo non è un problema, se non un sacco di ripetizioni. Ma cosa fare quando non sappiamo il loro numero esatto? In questo caso è necessario utilizzare metacaratteri speciali.

Per una descrizione di ripetizioni utilizzati kvadrifikatory – metacaratteri per specificare il numero. Kvadrifikatory sono di due tipi:

  • comuni tra parentesi;
  • ridotto.

quantificatore complessiva toccato dal numero minimo e massimo di ripetizioni consentito elemento in forma di due numeri nelle parentesi, come x {2,5}. Se il numero massimo di ripetizioni non è noto, il secondo argomento non viene specificato: x {2}.

quantificatori abbreviati sono simboli per i più comuni di ripetizioni al fine di evitare inutili sovraccarichi sintassi. Di solito ci sono tre tagli:

1. * – zero o più ripetizioni, che equivale a {0,}.

2. + – una o più ripetizioni, vale a dire, {1} …

3.? – zero o solo una ripetizione – {0,1}.

Esempi regex

Per coloro che imparano le espressioni regolari, esempi – il miglior libro di testo. Diamo alcuni che mostrano le loro opportunità, con un minimo di sforzo. Tutto il codice è completamente compatibile con le versioni di PHP 4.x e superiori. Per comprendere appieno la sintassi e l'utilizzo di tutte le caratteristiche del linguaggio si consiglia il libro di J .. Friedl, "espressioni regolari", che pienamente considerata la sintassi, e ci sono esempi di espressioni regolari non solo PHP, ma anche per un Python, Perl, MySQL, Java, Ruby, e C #.

Validazione Indirizzo e-mail

Task. C'è una pagina di Internet su cui è richiesto il visitatore indirizzo email. espressione regolare deve verificare la correttezza degli indirizzi prima di inviare i messaggi. Controllare non garantisce che la cassetta postale specificata esiste realmente e riceve messaggi. Ma estirpare indirizzi sbagliati, ovviamente, si può.

Decisione. Come con qualsiasi linguaggio di programmazione, in PHP espressione regolare verifica indirizzo e-mail può essere implementato in diversi modi, e gli esempi in questo articolo non sono la scelta finale e solo. Pertanto, in ogni caso, provvederemo ad un elenco di requisiti che devono essere presi in considerazione in fase di programmazione e di attuazione specifica dipende interamente lo sviluppatore.

Così, l'espressione che mette alla prova un indirizzo email valido, deve verificare le seguenti condizioni:

  1. La presenza in linea di partenza il simbolo @, e non ci sono lacune.
  2. La parte del dominio dell'indirizzo del simbolo @, contiene solo caratteri validi per i nomi di dominio. Lo stesso vale per il nome dell'utente.
  3. Quando si controlla il nome utente è necessario per determinare la presenza di caratteri speciali come un apostrofo o linea verticale. Tali simboli sono potenzialmente pericolosi e possono essere contenuti in tali tipi di attacchi che SQL-iniezione. Evita indirizzi.
  4. nomi utente consentono un solo punto, che non può essere il primo o l'ultimo carattere della stringa.
  5. Il nome di dominio deve contenere almeno due e non più di sei caratteri.

Esempio, tenendo conto di tutte queste condizioni si può vedere nella seguente figura.

Validazione di un URL

Task. Controllare se la stringa di testo specificata è una valida indirizzo URL. Ancora una volta, notiamo che le espressioni regolari URL controllo può essere implementato in vari modi.

Decisione. La nostra versione finale è il seguente:

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

Ora analizzare le sue componenti in modo più dettagliato con il disegno.

rivendicazione 1 Prima che l'URL non dovrebbe avere alcun carattere
rivendicazione 2 Verificare la presenza del prefisso obbligatoria «http»
punto 3 Non ci devono essere simboli
rivendicazione 4 Se c'è «s», l'URL punta a una connessione protetta «https»
rivendicazione 5 parte necessaria del "//"
rivendicazione 6 Nessun carattere
p. 7-9 Verifica del dominio di primo livello e la presenza del punto
p.10-13 Verifica il dominio di scrivere il secondo livello e il punto
p.14-17

Struttura dei file URL – un insieme di numeri, lettere, sottolineature, trattini, punti, e una barra alla fine

Controllare i numeri di carta di credito

Task. È necessario implementare la convalida del numero di carta di credito inserito dei sistemi di pagamento più comuni. Una variante solo per le schede Visa e MasterCard.

Decisione. Quando si crea l'espressione è necessario prendere in considerazione l'eventuale presenza di lacune nella stanza d'ingresso. Le cifre sulla mappa della città sono divisi in gruppi per una più facile lettura e dettatura. Pertanto, è naturale che una persona può cercare di inserire un numero in questo modo (cioè. E. Utilizzare spazi).

Scrivi un'espressione universale che tenga conto delle possibili spazi o trattini, è più complicato di una semplice scartare tutti i caratteri ad eccezione di cifre. Pertanto, si consiglia di utilizzare un carattere jolly espressione / D, che rimuove tutti i caratteri ad eccezione di cifre.

Ora si può andare direttamente al numero di controllo. Tutte le aziende, gli emittenti di carte di credito utilizzano un formato numero univoco. Nell'esempio viene utilizzato, e il client non ha bisogno di inserire il nome della società – è determinato dal numero. carte Visa iniziano sempre con i numeri 4 e hanno una lunghezza di 13 o 16 cifre. MasterCard ha inizio nel range di 51-55 con un lungo numero di 16. Di conseguenza, si ottiene la seguente espressione:

Prima di elaborare l'ordine può essere ulteriormente verificato le ultime cifre del numero, che viene calcolato sulla formula di luhn.

Verifica numero di telefono

Task. Verifica della correttezza del numero di telefono inserito.

Decisione. Il numero di cifre dei numeri telefonici fissi e mobili variare notevolmente a seconda del paese, così universalmente controllare utilizzando le espressioni regolari, il numero di telefono in modo corretto impossibile. Ma i numeri internazionali hanno un formato rigoroso e perfetto per il controllo del modello. Tanto più che sempre più operatori telefonici nazionali stanno cercando di incontrare lo stesso standard. Struttura in camera è la seguente:

+ CCC.NNNNNNNNNNxEEEE, dove:

– C – è il codice del paese composto da 1-3 cifre.

– N – numero fino a 14 cifre.

– E – estensione opzionale.

Plus è un elemento indispensabile, e il segno X è presente solo quando necessario estensione.

Di conseguenza abbiamo la seguente espressione:

^ + [0-9] {1,3 } [0-9] {4,14}. (:?. X +)? $

I numeri della gamma

Task. È necessario garantire coincidenza intera di un certo intervallo. Inoltre, è necessario trovare un'espressione regolare solo i numeri della serie.

Decisione. Qui ci sono alcune espressioni per alcuni dei casi più comuni:

Determinare ore 1-24 ^ (1 [0-2] | [1-9]) $
Giorno del mese 1-31 ^ (3 [01] | [12] [0-9] | [1-9]) $
o secondi minuti 0-59 ^ [1-5] [0-9] $
Un numero da 1 a 100 * (100 |? [1-9] [0-9]) $
Giorno dell'anno 1-366 ^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} |? [1-9] [0-9]) $

Cerca indirizzi IP

Task. È necessario determinare se una data stringa è un indirizzo IP valido nel formato IPv4 nell'intervallo da 000.000.000.000-255.255.255.255.

Decisione. Come per qualsiasi problema nella lingua del PHP, l'espressione regolare ha molti varintov. Ad esempio, questo:

controllo in linea di espressioni

Controllare regex correttamente per i principianti può essere difficile a causa della complessità della sintassi, che differisce da "regolari" linguaggi di programmazione. Per risolvere questo problema, ci sono molti tester in linea espressioni che lo rendono facile da controllare la correttezza del modello creato nel testo vero e proprio. Il programmatore inserisce i dati di espressione e la verifica e vedere immediatamente il risultato del trattamento. Di solito è presente una sezione di riferimento, che dettaglia le espressioni regolari, esempi e le differenze di implementazione per le lingue più estese.

Ma ai servizi online completamente fiduciari risultati non raccomandato per tutti gli sviluppatori che utilizzano PHP. Un'espressione regolare è scritto e verificato di persona, solleva qualificazione e garantisce l'assenza di errori.