PHP (reguliariosios išraiškos) - kas tai yra? Reguliariųjų posakių pavyzdžiai ir tikrinimas

Kompiuteriai

Dirbdami su tekstais bet kurioje šiuolaikinėje kalbojeprogramavimo kūrėjai nuolat patenkina užduotus patikrinti įvesti duomenis, kad jie atitiktų norimą šabloną, ieškotų ir pakeistų bandymo fragmentus ir kitas tipines operacijas, skirtas apdoroti informaciją apie simbolius. Savo tikrinimo algoritmų kūrimas lemia laiko praradimą, programos kodo nesuderinamumą ir jo tobulinimo bei modernizavimo sudėtingumą.

Spartus interneto ir WEB plėtros kalbų vystymasreikalavo sukurti universalią ir kompaktišką teksto informacijos apdorojimo priemonę su minimaliu kodo kiekiu, reikalingu tam. PHP kalba nėra išimtis ir yra populiari tarp pradedančiųjų ir profesionalių kūrėjų. Reguliarus išraiškos būdas kaip teksto šablonų kalba leidžia supaprastinti teksto apdorojimo užduotį ir sumažinti programos kodą iki dešimčių ir šimtų eilučių. Daugelis užduočių negali būti išspręstos be jo.

PHP reguliarios išraiškos

Reguliariosios išraiškos PHP

PHP kalba yra trys mechanizmai dirbti suReguliarios išraiškos yra "ereg", "mb_ereg" ir "preg". Dažniausiai naudojama "preg" sąsaja, kurios funkcijos suteikia prieigą prie PCRE įprastinės išraiškos palaikymo bibliotekos, kuri iš pradžių buvo sukurta Perlo kalba ir įtraukta į PHP paketą. Preg-funkcijos ieškomos tam tikroje teksto eilutėje rungtynių pagal tam tikrą modelį reguliaraus išraiškos kalba.

Sintaksės pagrindai

reguliarios išraiškos pavyzdžiai

Pagal trumpą straipsnį neįmanoma išsamiai apibūdintiaprašyti visą sintaksę reguliarios išraiškos, šiuo tikslu yra speciali literatūra. Čia pateikiami tik pagrindiniai elementai, parodantys platų kūrėjo galimybes ir kodų pavyzdžių supratimą.

PHP formuliariai apibrėžta reguliaraus išraiškatai yra labai sunku, todėl supaprastiname aprašymą. Reguliarus išraiška yra tekstinė eilutė. Ją sudaro atskirtas šablonas ir modifikatorius, kuris nurodo, kaip su juo elgtis. Šablonuose galima įtraukti įvairias alternatyvas ir pakartojimus.

Pavyzdžiui, išraiška / d (3) -d (2) -d (2) / m atskyriklis bus "/", tada eina simbolis ir simbolis "M" bus modifikatorius.

Visos reguliariosios išraiškos galias yra koduojamosnaudojant meta ženklus. Pagrindinė metachartiko kalba yra grįžtamoji brūkšnys - "". Jis pakeičia po jo esantį simbolį priešingą (tai yra, įprastas simbolis virsta metaforu ir atvirkščiai). Kitas svarbus meta žymeles yra tiesioginė eilutė "|", kuri nurodo alternatyvius šablono variantus. Daugiau metaforų pavyzdžių:

^Objekto ar eilutės pradžia
(Pradžios pakraštys
)Penkių taškų galas
{Kvantifikatoriaus kilmė
}Kvantifikatoriaus pabaiga
ddešimtainis skaitmuo nuo 0 iki 9
Dbet koks simbolis, kuris nėra skaitmuo
stuščias ženklas, tarpas, skirtukas
wžodynas simbolis

PHP, apdorojantis reguliariuosius išraiškos, laiko erdvę kaip atskirą reikšmingą simbolį, todėl išraiškos ABCDEF ir ABC WHERE yra skirtingos.

Subcapterns

PHP reguliariai subquares yra paskirstomi skliaustuose ir kartais vadinami "subexpressions". Atlikite šias funkcijas:

  1. Skirti alternatyvas. Pavyzdžiui, karščiavimas sutampa su žodžiais "Šiluma", "žaliasis paukštis" ir "Karštas". Ir be skliaustų tai bus tik tuščia eilutė, "paukštis" ir "kepsnys".

  2. "Įspūdingas" pietus. Tai reiškia, kad jei substratas atitinka šabloną, tada visos rungtynės grąžinamos kaip rezultatas. Aiškumo dėlei mes pateikiame pavyzdį. Pateikiama tokia reguliarioji išraiška: laimėjo ((gold | gold)) (medalius | cup)) - ir eilutė, skirta ieškoti rungtynių: "Laimėtojas gauna aukso medalį". Be originalios frazės, paieškos rezultatas bus: "Aukso medalis", "Medalis", "auksas".

Pakartojimų operatoriai (quadrifiers)

Kuriant reguliarias išraiškas labai dažnaiBūtina išanalizuoti skaičių ir simbolių pasikartojimą. Tai nėra problema, jei nėra per daug pakartojimų. Bet ką daryti, jei mes nežinome jų tikslaus skaičiaus? Tokiu atveju turite naudoti specialius metaforus.

Norėdami aprašyti pasikartojimus, naudojami kvadratai - metaforos, nurodančios numerį. Keturios kategorijos yra dviejų tipų:

  • bendras, pridedamas skliaustuose;
  • sutrumpintas

Bendras kvantifikatorius yra minimizuotas irmaksimalus leidžiamų pakartotinių elementų skaičius, sudarytas dviejų skaičių gijomis, pvz .: x {2,5}. Jei maksimalus pakartojimų skaičius nežinomas, antrasis argumentas nenurodytas: x {2,}.

Sumažinti kvantifikatoriai yra dažniausiai pasikartojančių simbolių, siekiant išvengti nereikalingo sintaksės perkrovimo. Paprastai naudojami trys sutrumpinimai:

1. * - nulis arba daugiau pakartojimų, o tai reiškia, kad {0,}.

2. + vienas ar daugiau pakartojimų, t. Y. {1,}.

3.? - nulis arba tik vienas pasikartojimas - {0,1}.

Reguliariųjų išraiškos pavyzdžiai

Tiems, kurie mokosi reguliarios išraiškos,pavyzdžiai yra geriausias vadovėlis. Mes suteiksime kelias, parodančias jų gausias galimybes su mažiausiai pastangų. Visi programų kodai yra visiškai suderinami su PHP 4.x ir aukštesnės versijos. Norint visiškai suprasti sintaksę ir naudojimas visų kalbos funkcijų Rekomenduojame knyga J .. Friedl "reguliarios išraiškos", kuri visiškai laikomas sintaksė, ir ten yra pavyzdžiai reguliarios išraiškos ne tik PHP, bet ir Python, Perl, MySQL, Java, Ruby ir C #.

Patikrinkite el. Pašto adreso teisingumą

Užduotis. Yra interneto puslapis, kuriamelankytojui reikia el. pašto adreso. Prieš siunčiant pranešimus, reguliariosios išraiškos turi patikrinti gauto adreso teisingumą. Patikrinimas negarantuoja, kad nurodyta pašto dėžutė tikrai egzistuoja ir priima laiškus. Bet galima iškrauti sąmoningai neteisingus adresus.

Sprendimas. Kaip ir bet kurioje programavimo kalboje, PHPReguliarios el. pašto adreso patvirtinimo išraiškos gali būti įgyvendintos įvairiais būdais, o šiame straipsnyje pateikti pavyzdžiai nėra galutinis ir vienintelis variantas. Todėl kiekvienu atveju mes išvardinsime reikalavimus, į kuriuos reikia atsižvelgti programuojant, o konkretus įgyvendinimas priklauso tik nuo kūrėjo.

Taigi, išraiškos, kuri tikrina el. Pašto galiojimą, turėtų patikrinti šias sąlygas:

  1. "@" Simbolio buvimas šaltinio eilutėje ir tarpų nebuvimas.
  2. Domeno adreso dalis, esanti už @ simbolio, turi tik galiojančius domenų vardų simbolius. Tas pats pasakytina apie vartotojo vardą.
  3. Patvirtinant vartotojo vardą turite tai padarytiNustatykite specialių simbolių buvimą, pvz., Apostrofą arba vertikalią juostą. Tokie simboliai yra potencialiai pavojingi ir gali būti laikomi atakų, tokių kaip SQL injekcijos. Venkite šių adresų.
  4. vardai leidžia tik vieną tašką, kuris gali būti ne pirmas arba paskutinis simbolis į eilutę.
  5. Domeno vardas turi būti ne mažiau kaip du ir ne daugiau kaip šeši simboliai.

Pavyzdys, kuriame atsižvelgiama į visas šias sąlygas, yra parodytas paveikslėlyje.

php reguliariosios išraiškos el

Patvirtinti URL

Užduotis. Patikrinkite, ar nurodyta teksto eilutė yra galiojantis URL. Dar kartą įprasti URL išraiškos gali būti įvedami įvairiais būdais.

Sprendimas. Mūsų galutinis variantas yra toks:

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

Dabar analizuosime jo sudedamąsias dalis, naudodamiesi figūra.

reguliariosios išraiškos url

1 punktasPrieš URL negali būti jokių simbolių
2 punktasMes patikriname privalomą prefiksą "http"
3 punktasTuri būti jokių simbolių
4 punktasJei yra "s", tada URL nurodo saugų ryšį "https"
5 punktasBūtinas "//"
6 punktasNėra simbolių
7-9 punktasPirmojo lygio domeno teisingumo patikrinimas ir taško prieinamumas
10-13Kontroliuojamas antrojo lygio domeno ir taško rašymo teisingumas
14-17 punktas

URL failo struktūra yra skaičių, raidžių, pabraukimų, brūkšnių, taškų ir brūkšnių rinkinys pabaigoje

Tikrinami kreditinių kortelių numeriai

Užduotis. Būtina patikrinti dažniausiai naudojamų mokėjimo sistemų įvestos plastikinės kortelės numerio teisingumą. Ši galimybė svarstoma tik "Visa" ir "MasterCard".

Sprendimas. Kurdami išraišką, turite apsvarstytiGalimas buvimas tarpų įvedant numerį. Žemėlapyje esantys skaičiai skirstomi į grupes, kad būtų lengviau skaityti ir diktuoti. Todėl yra gana natūralu, kad asmuo gali bandyti įvesti numerį tokiu būdu (ty naudojant tarpus).

Parašyk visuotinę išraišką, į kurią atsižvelgiamagalimi tarpai ir brūkšneliai, yra sunkiau, nei tiesiog išskaidomi visi simboliai, išskyrus skaitmenis. Todėl raiškoje rekomenduojama naudoti / D metacharacter, kuris pašalina visus simbolius, išskyrus skaitinius.

Dabar galite tiesiogiai pereiti įpatikrinti numerius. Visos kredito kortelių įmonės naudoja unikalų skaičių formatą. Pavyzdyje tai naudojama, o klientui nereikia įvesti įmonės pavadinimo - tai priklauso nuo jo skaičiaus. Visa kortelė visada prasideda nuo 4 ir yra 13 ar 16 skaitmenų ilgio. "MasterCard" prasideda nuo 51-55 diapazone su 16 skaičiaus ilgiu. Todėl mes gauname tokią išraišką:

reguliarios išraiškos pavyzdžiai

Prieš apdoroję užsakymą, galite atlikti papildomą paskutinio skaitmens skaičiaus patikrinimą, kuris apskaičiuojamas naudojant "Luna" algoritmą.

Telefono numerių tikrinimas

Užduotis. Patikrinkite įvesto telefono numerio teisingumą.

Sprendimas. Skaičių skaičius fiksuotame ir mobiliametelefono numeriai labai skiriasi priklausomai nuo šalies, todėl visuotinai neįmanoma patikrinti telefono numerio teisingumo naudojant reguliaraus išraišką. Tačiau tarptautiniai numeriai yra griežto formato ir puikiai tinka modelio patikrinimui. Be to, vis daugiau ir daugiau nacionalinių telefono operatorių bando atitikti vieningą standartą. Numerio struktūra yra tokia:

+ CCC.NNNNNNNNNNxEEEE, kur:

- C yra šalies kodas, susidedantis iš 1-3 skaitmenų.

- N - numeris iki 14 skaitmenų.

- E - neprivalomas pratęsimas.

Plius yra reikalingas elementas, o x yra tik tada, kai reikalingas išplėtimas.

Todėl mes turime tokią išraišką:

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

Skaičiai diapazone

Užduotis. Būtina užtikrinti, kad tikslus skaičius iš tam tikro diapazono atitiktų. Be to, jums reikia rasti reguliarios išraiškos tik numerius iš įvairių verčių.

Sprendimas. Štai keli iš dažniausiai pasitaikančių atvejų:

Nustatykite valandą nuo 1 iki 24^ (1 [0-2] | [1-9]) $
Diena per mėnesį 1-31^ (3 [01] | [12] [0-9] | [1-9]) $
Antroji ar minutė 0-59^ [1-5]? [0-9] $
Numeris nuo 1 iki 100^ (100 | [1-9]? [0-9]) $
1-366 metų diena^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] [2] | [1-9] [0-9]?) $

IP adreso paieška

Užduotis. Būtina nustatyti, ar nurodyta eilutė yra galiojantis IPv4 IP adresas nuo 000 000 000 iki 255 255 255 255.

Sprendimas. Kaip ir bet kokia PHP kalbos problema, reguliaraus išraiška turi daugybę variantų. Pavyzdžiui, tokie:

reguliarios išraiškos erdvė

Patikrinimas internete

reguliarios išraiškos el

Patikrinkite taisyklingos išraiškos teisingumuiPradedantiesiems programuotojams gali būti sunku dėl sintaksės sudėtingumo, kuris skiriasi nuo "įprastų" programavimo kalbų. Norėdami išspręsti šią problemą, yra daugybė žodžių testų internete, kurie leidžia lengvai patikrinti sukurto šablono teisingumą tikrame tekste. Programuotojas įveda frazę ir duomenis, kad patikrintų, o apdorojimo rezultatą mato akimirksniu. Paprastai yra ir nuorodų skiltis, kurioje išsamiai aprašomos dažniausiai pasitaikančių programavimo kalbų reguliarios išraiškos, pavyzdžiai ir įgyvendinimo skirtumai.

Tačiau visiškai pasitiki internetinių paslaugų rezultatais.nerekomenduojama visiems PHP kūrėjams. Reguliari išraiška, parašyta ir išbandyta asmeniškai, pagerina kvalifikaciją ir neužtikrina klaidų.