Når du arbejder med tekster på ethvert moderne sprogProgrammeringsudviklere står konstant over for opgaverne med at kontrollere de indtastede data for overholdelse af det krævede mønster, finde og erstatte testfragmenter og andre typiske operationer til behandling af symbolsk information. Udviklingen af dine egne verifikationsalgoritmer fører til tab af tid, inkompatibilitet mellem programkoden og kompleksitet i dens udvikling og modernisering.
Hurtig udvikling af Internettet og WEB-udviklingssprogkrævede oprettelse af universelle og kompakte metoder til behandling af tekstinformation med den mindste mængde kode, der kræves til dette. PHP-sprog, populært blandt begyndere og professionelle udviklere, er ingen undtagelse. Regelmæssigt udtryk som tekstskabelonsprog gør det muligt at forenkle tekstbehandlingsopgaver og reducere programkoden med ti eller hundreder af linjer. Mange opgaver kan slet ikke løses uden det.
PHP-sproget indeholder tre mekanismer til at arbejde medregulære udtryk er "ereg", "mb_ereg" og "preg". Den mest almindelige er "preg" -grænsefladen, hvilke funktioner giver adgang til PCRE regex-biblioteket, oprindeligt udviklet til Perl-sproget, der er inkluderet i PHP. Preg-funktioner kigger efter match i en given tekststreng i henhold til et bestemt mønster i regulært udtrykssprog.
Det er umuligt at detaljer i en kort artikelFor at beskrive hele syntaksen for regulære udtryk er der speciel litteratur til dette. Her er blot hovedelementerne for at vise de brede muligheder for udvikleren og forstå kodeeksemplerne.
I PHP er regex formelt defineretmeget vanskeligt, og derfor forenkle beskrivelsen. Det regulære udtryk er en tekststreng. Den består af en afgrænset skabelon og en modifikator, der specificerer, hvordan den skal håndteres. Det er muligt at medtage forskellige alternativer og gentagelser i skabeloner.
For eksempel i udtrykket / d {3} -d {2} -d {2} / m separator vil være "/"efterfulgt af mønsteret og symbolet "M" vil være en modifikator.
Al kraften i regulære udtryk er kodet medved hjælp af metategn. Sprogets vigtigste metakarakter er en tilbageslag - "". Det ændrer typen af det næste tegn til det modsatte (det vil sige, at en almindelig karakter bliver til en metakarakter og omvendt). En anden vigtig metakarakter er skråstreg "|", som specificerer alternativer til mønsteret. Flere eksempler på metategn:
^ | Begyndelsen af et objekt eller en linje |
( | Start af undermønster |
) | Afslut sub-mønster |
{ | Kvantificeringsstart |
} | Slutningen af kvantificeringen |
d | decimaltal fra 0 til 9 |
D | ethvert tegn, der ikke er et ciffer |
med | tomt tegn, mellemrum, fane |
w | ordforrådssymbol |
PHP behandler plads som en separat signifikant karakter, når man behandler regulære udtryk, så udtrykkene ABCGDE og ABC WHERE er forskellige.
I PHP er regelmæssige undermønstre lukket i parentes og kaldes undertiden "underudtryk." De udfører følgende funktioner:
Fremhæv alternativer... For eksempel skabelonen varme (noget | fugl |) matcher ordene "Heat", "firebird" og "stege"... Og uden parenteser vil det bare være en tom streng, "fugl" og "stegt".
Et "spændende" undermønster. Dette betyder, at hvis et substring matcher i mønsteret, returneres alle matches som resultat. Af klarhedshensyn lad os give et eksempel. Givet følgende regex: vinderen modtager ((guld | forgyldt) (medalje | kop)) - og en streng for at finde matches: "Vinderen modtager en guldmedalje"... Ud over den originale sætning vender søgningen tilbage: "Guldmedalje", "Medalje", "guld".
Når du skriver regulære udtryk, er det meget almindeligtdet er nødvendigt at analysere gentagelser af tal og symboler. Dette er ikke et problem, hvis der ikke er meget mange gentagelser. Men hvad hvis vi ikke kender deres nøjagtige antal? I dette tilfælde skal du bruge specielle metategn.
For at beskrive gentagelser bruges kvadrater - metategn til at indstille nummeret. Quadrifiers er af to typer:
Den fælles kvantator berører minimum ogdet maksimale antal tilladte gentagelser af et element i form af to tal i krøllede seler, for eksempel: x {2,5}. Hvis det maksimale antal gentagelser er ukendt, udelades det andet argument: x {2,}.
Forkortede kvantificeringsmidler er symboler for de mest almindelige gentagelser for at undgå unødvendig syntaksoverbelastning. Tre forkortelser er almindeligt anvendt:
1. * - nul eller flere gentagelser, hvilket svarer til {0,}.
2. + - en eller flere gentagelser, dvs. {1,}.
3.? - nul eller kun en gentagelse - {0,1}.
For dem der lærer regelmæssige udtryk,eksempler er den bedste vejledning. Vi vil præsentere et par, der viser deres brede kapaciteter med et minimum af indsats. Alle programkoder er fuldt kompatible med PHP 4.x og højere versioner. For en komplet forståelse af syntaksen og brugen af alle sprogets funktioner, anbefaler vi bogen af J. Friedl "Regular Expressions", som fuldt ud undersøger syntaksen og giver eksempler på regulære udtryk ikke kun i PHP, men også til Python , Perl, MySQL, Java, Ruby og C #.
En opgave. Der er en webside, hvorden besøgendes e-mail-adresse anmodes om. Det regulære udtryk skal kontrollere gyldigheden af den modtagne adresse, inden der sendes beskeder. Bekræftelse garanterer ikke, at den angivne postkasse faktisk eksisterer og accepterer breve. Men det kan udrydde bevidst forkerte adresser.
Løsningen. Som med ethvert programmeringssprog, i PHPValideringsregistre til e-mail-adresser kan implementeres på mange forskellige måder, og eksemplerne i denne artikel er ikke den endelige og eneste mulighed. Derfor giver vi i hvert tilfælde en liste over krav, der skal tages i betragtning ved programmering, og den specifikke implementering er helt op til udvikleren.
Så e-mail-valideringsudtrykket skal kontrollere følgende betingelser:
Et eksempel, der tager højde for alle disse forhold, kan ses i nedenstående figur.
En opgave. Kontroller, om den givne tekststreng er en gyldig URL. Bemærk igen, at regulære udtryk til URL-validering kan implementeres på en række forskellige måder.
Løsningen. Vores endelige version ser sådan ud:
/ ^ (https?: //)? ((da-z.-> +). ([a-z. * [2,6]) ([/ w .-] *) * /? $ /
Nu analyserer vi dens komponenter mere detaljeret ved hjælp af billedet.
punkt 1 | Der må ikke være nogen tegn foran URL'en |
punkt 2 | Kontrollerer det obligatoriske præfiks "http" |
punkt 3 | Der skal ikke være nogen symboler |
punkt 4 | Hvis "s" er til stede, angiver URL'en en sikker forbindelse "https" |
punkt 5 | Nødvendigt fragment "//" |
punkt 6 | Ingen symboler |
s. 7-9 | Kontrol af gyldigheden af det første niveau domæne og tilstedeværelsen af en prik |
s.10-13 | Kontrol af stavningen af det andet niveau domæne og periode |
s.14-17 | URL-filens struktur - et sæt tal, bogstaver, understregninger, bindestreger, punktum og en efterfølgende skråstreg |
En opgave. Det er nødvendigt at kontrollere rigtigheden af det indtastede plastkortnummer for de mest almindelige betalingssystemer. En mulighed overvejes kun for Visa- og MasterCard-kort.
Løsningen. Når du opretter et udtryk, skal du overvejemulig tilstedeværelse af mellemrum i det indtastede nummer. Tallene på kortet er opdelt i grupper for lettere læsning og diktering. Derfor er det kun naturligt for en person at forsøge at indtaste et nummer på denne måde (dvs. ved at bruge mellemrum).
Skriv et generisk udtryk, der tager højde formulige mellemrum og bindestreger er vanskeligere end bare at droppe alle tegn undtagen tal. Derfor anbefales det at bruge / D-metategnet i udtrykket, som fjerner alle tegn undtagen tal.
Nu kan du gå direkte tilkontrollere nummeret. Alle kreditkortselskaber bruger et unikt nummerformat. Eksemplet bruger dette, og kunden behøver ikke at indtaste firmanavnet - det identificeres med nummer. Visakort starter altid med 4 og er 13 eller 16 cifre lange. MasterCard starter i området 51-55 med en talelængde på 16. Som et resultat får vi dette udtryk:
Inden du behandler ordren, kan du desuden kontrollere det sidste ciffer i nummeret, der beregnes ved hjælp af Luna-algoritmen.
En opgave. Kontrol af rigtigheden af det indtastede telefonnummer.
Løsningen. Antal cifre i fastnet og mobiltelefonnumre varierer betydeligt fra land til land, så det er umuligt at universelt kontrollere et telefonnummer ved hjælp af regulære udtryk for korrekthed. Men internationale numre har et strengt format og er gode til mønsterkontrol. Desuden forsøger flere og flere nationale telefonoperatører at overholde en enkelt standard. Problemets struktur er som følger:
+ CCC.NNNNNNNNNNxEEEE, hvor:
- C er en 1-3-cifret landekode.
- N - antal op til 14 cifre.
- E er en valgfri udvidelse.
Plus er påkrævet, og x er kun til stede, når der kræves en udvidelse.
Som et resultat har vi følgende udtryk:
^ + [0-9] {1,3}. [0-9] {4,14} (?: X. +)? $
En opgave. Du skal sikre, at et heltal fra et bestemt interval matcher. Derudover kræves det, at regulære udtryk kun finder tal fra en række værdier.
Afgørelse. Her er nogle udtryk for flere af de mest almindelige tilfælde:
Bestem timen fra 1 til 24 | ^ (1 [0-2] | [1-9]) $ |
Dag inden for måned 1-31 | ^ (3 [01] | [12] [0-9] | [1-9]) $ |
Andet eller minut 0-59 | ^ [1-5]? [0-9] $ |
Et tal fra 1 til 100 | ^ (100 | [1-9]? [0-9]) $ |
Årets dag 1 - 366 | ^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} | [1-9] [0-9]?) $ |
En opgave. Du skal afgøre, om den angivne streng er en gyldig IPv4 IP-adresse i området 000.000.000.000-255.255.255.255.
Løsningen. Som med enhver opgave i PHP er der mange variationer af et regulært udtryk. For eksempel dette:
Kontrollerer regelmæssige udtryk for korrekthed forBegynderprogrammerere kan være udfordrende på grund af syntaksens kompleksitet, som adskiller sig fra "normale" programmeringssprog. For at løse dette problem er der mange online ekspressionstestere, der giver dig mulighed for nemt at kontrollere rigtigheden af den oprettede skabelon på ægte tekst. Programmøren indtaster et udtryk og data, der skal kontrolleres, og ser øjeblikkeligt resultatet af behandlingen. Normalt er der også et referenceafsnit, der beskriver detaljerede regulære udtryk, eksempler og implementeringsforskelle for de mest almindelige programmeringssprog.
Men stol helt på resultaterne af onlinetjenesteranbefales ikke til alle PHP-udviklere. En regex, skrevet og testet personligt, er opdateret og garanteret fejlfri.