RekenaarsProgrammering

PHP (regex) - wat is dit? Voorbeelde en die nagaan van gereelde uitdrukkings

By die werk met teks in enige moderne programmeertaal, ontwikkelaars voortdurend te voldoen aan die doelwitte van insette validering vir die nakoming van die verlangde patroon, soek en vervang toets fragmente en ander vorme van die verwerking van bedrywighede van karakter inligting. Ontwikkel jou eie validering algoritmes lei tot die verlies van tyd, die kode verenigbaarheid en kompleksiteit in die ontwikkeling en modernisering.

Die snelle ontwikkeling van die Internet en WEB-ontwerp tale vereis die skepping van veelsydige en kompak middel van teks met 'n minimum bedrag wat nodig is vir hierdie kode. Dit is geen uitsondering nie en is gewild onder beginners en professionele ontwikkelaars van PHP taal. Die gewone uitdrukking taal as die teks templates om die taak van die teks hanteer vereenvoudig en kode te verminder vir tiene en honderde van lyne. Baie probleme kan nie opgelos word glad daarsonder.

Gereelde Expressions in PHP

PHP taal het drie meganismes vir die werk met gereelde uitdrukkings - «ereg», «mb_ereg» en «Preg». Die mees algemene is die koppelvlak «Preg», wie se funksies te voorsien toegang tot die biblioteek van die PCRE regular expression ondersteuning, oorspronklik ontwikkel vir die Perl taal, wat ingesluit is in die PHP pakket. Preg-soek funksies in 'n gegewe teks string wat ooreenstem, volgens 'n sekere patroon in die taal van gereelde uitdrukkings.

sintaksis Basics

As deel van 'n kort artikel is dit onmoontlik om te beskryf in detail die hele regular expression sintaksis, vir hierdie is daar 'n spesiale literatuur. Ons bied net die belangrikste elemente om geleenthede vir ontwikkelaar wys en verstaan die kode voorbeelde.

In PHP gewone uitdrukking is formeel gedefinieer baie moeilik, en daarom vereenvoudig die beskrywing. 'N Gereelde uitdrukking is 'n teks string. Dit bestaan uit 'n toegewyde separator sjabloon en die wysiger dui die manier om dit te hanteer. Moontlike insluiting in die verskillende alternatiewe en herhalings van patrone.

Byvoorbeeld, in uitdrukking / \ d {3} - \ d {2} - \ d {2} / m deler is "/", gevolg deur die sjabloon, en die simbool «m» is die wysiger.

Al die krag van gereelde uitdrukkings word geïnkripteer met behulp van meta-karakters. Die hooftaal metacharacter is die agteroorskuinsstreep - "\". Dit verander die tipe volgende karakters op die teenoorgestelde (dws. E. omskep in 'n gewone karakter wildcard en omgekeerd). Nog 'n belangrike metacharacter is 'n reguit lyn «|», spesifiseer die alternatiewe sjabloon. Nog voorbeelde van meta-karakters:

^ Begin voorwerp of 'n string
( begin subpattern
) einde subpattern
{ begin kwantifiseerder
} einde kwantifiseerder
\ d desimale syfer van 0 tot 9
\ D enige karakter wat nie 'n aantal
\ s leë simbool, ruimte, blad,
\ w simbool woordeboek

PHP, die verwerking van gereelde uitdrukkings, ruimte beskou as 'n afsonderlike geldige karakter, so die uitdrukking van XYZ en ABC Waar is anders.

subpatterns

In PHP gereelde subpatterns deur hakies, en hulle soms genoem "aangestel vir subuitdrukkingen". Voer die volgende funksies:

  1. Toekenning alternatiewe. Byvoorbeeld, die hitte patroon (iets | Bird |) val saam met die woorde "hitte", "Firebird" en "warm". En sonder die hakies dit sal net 'n leë string, "voël" en "warm" te wees.

  2. "Spectacular" subpattern. Dit beteken dat as die patroon ooreenstem substring, dan terug al wedstryde. Vir duidelikheid, gee ons 'n voorbeeld. Gegewe die volgende gewone uitdrukking: die wenner ontvang ((goue | vergulde) (medalje | koppie)) - en die string vir wedstryde, "het die wenner kry 'n goue medalje." In bykomend tot die aanvanklike frase, sal die resultate word uitgereik: "goue medalje", "medaljes", "goud".

Operateurs herhalings (kvadrifikatory)

By die samestelling van die gewone uitdrukking is dikwels nodig om die herhaling van getalle en simbole te ontleed. Dit is nie 'n probleem, indien nie 'n baie herhalings. Maar wat om te doen wanneer ons nie die presiese aantal ken? In hierdie geval is dit nodig om spesiale meta karakters gebruik.

Vir 'n beskrywing van herhalings gebruik kvadrifikatory - meta karakters om die getal spesifiseer. Kvadrifikatory is van twee soorte:

  • algemeen in hakies;
  • verminder.

Algehele kwantifiseerder aangeraak deur die minimum en maksimum aantal toegelaat herhalings element in die vorm van twee getalle in die draadjies, soos x {2,5}. As die maksimum aantal herhalings nie bekend, is die tweede argument nie vermeld: x {2}.

Verkorte kwantifiseerders is simbole vir die mees algemene herhalings ten einde onnodige oorlading sintaksis te vermy. Gewoonlik is daar drie snitte:

1. * - nul of meer herhalings, wat gelykstaande is aan {0,}.

2. + - een of meer herhalings, dit wil sê, {1} ...

3.? - nul of net een herhaal - {0,1}.

voorbeelde regex

Vir diegene wat gereelde uitdrukkings, voorbeelde leer - die beste handboek. Ons gee 'n paar wat hul geleenthede te wys met 'n minimum van inspanning. Alle kode is ten volle versoenbaar met weergawes van PHP 4.x en hoër. Om ten volle te verstaan die sintaksis en gebruik van alle taalkenmerke ons beveel die boek deur J .. Friedl, "gereelde uitdrukkings", wat ten volle oorweeg sintaksis, en daar is voorbeelde van gereelde uitdrukkings nie net PHP, maar ook vir 'n Python, Perl, MySQL, Java, Ruby, en C #.

Validering E-pos adres

Taak. Daar is 'n Internet bladsy waarop die besoeker word versoek adres e-pos. Gereelde uitdrukking moet die korrektheid van die adresse te gaan voordat die stuur van boodskappe. Check waarborg nie dat die gespesifiseerde posbus werklik bestaan en ontvang boodskappe. Maar onkruid uit natuurlik verkeerd adresse dit kan.

Besluit. Soos met enige programmeertaal, in PHP regex e-posadres verifikasie kan word in verskillende maniere geïmplementeer, en die voorbeelde in hierdie artikel is nie van die finale en enigste keuse. Daarom, in elke geval, ons sal 'n lys van vereistes wat in ag geneem moet word tydens programmering en spesifieke implementering hang geheel en al op die ontwikkelaar voorsien.

So, die uitdrukking dat 'n geldige e-toetse, moet die volgende voorwaardes na te gaan:

  1. Die teenwoordigheid in die beginspan die @ simbool, en daar is geen gapings.
  2. Die domein deel van die adres van die @ simbool, bevat slegs geldig karakters vir domein name. Dieselfde geld vir naam van die gebruiker.
  3. Wanneer die nagaan van die gebruikersnaam is wat nodig is om die teenwoordigheid van spesiale karakters bepaal soos 'n toespraak of vertikale lyn. Sulke simbole is potensieel gevaarlik en kan vervat word in so 'n soort van aanvalle wat SQL-inspuiting. Vermy adresse.
  4. gebruikers toelaat net een punt, wat nie die eerste of laaste karakter in die string kan wees.
  5. Die domein naam moet ten minste twee en nie langer as ses karakters bevat.

Byvoorbeeld, met inagneming van al hierdie toestande kan gesien word in die volgende figuur.

Bekragtiging van 'n URL

Taak. Kyk of die gespesifiseerde teks string is 'n geldige adres URL. Weereens, ons daarop let dat gereelde uitdrukkings URL kontrole op verskeie maniere geïmplementeer kan word.

Besluit. Ons finale weergawe is soos volg:

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

Nou analiseer die komponente in meer detail met behulp van die tekening.

eis 1 Voor die URL nie enige karakters moet hê
eis 2 Gaan die teenwoordigheid van die verpligte voorvoegsel «http»
item 3 Daar moet geen simbole
eis 4 As daar «s", die URL dui op 'n veilige verbinding «https»
eis 5 Vereis gedeelte van die "//"
eis 6 geen karakters
p. 7-9 Verifikasie van die eerste vlak domein en die teenwoordigheid van punt
p.10-13 Verifikasie van die domein van die skryf van die tweede vlak en die punt
p.14-17

Lêerstruktuur URL - 'n stel getalle, letters, onderstreping, strepies, kolletjies, en 'n streep aan die einde

Kyk op die kredietkaart nommers

Taak. Wat jy nodig het om bekragtiging van die ingevoerde kredietkaart nommer van die mees algemene betaling stelsels te implementeer. A variant net vir kaarte Visa en MasterCard.

Besluit. Wanneer die skep van die uitdrukking wat jy nodig het om in ag te neem die moontlike teenwoordigheid van gapings in die insette kamer. Die syfers aan die kaart is in groepe verdeel vir makliker lees en diktee. Daarom is dit logies dat 'n persoon kan probeer om 'n aantal betree op hierdie manier (dws. E. Die gebruik van spasies).

Skryf 'n universele uitdrukking wat rekening hou met die moontlike ruimtes of koppel, is meer ingewikkeld as net al die karakters weggooi behalwe syfers. Daarom beveel ons aan met behulp van 'n wildcard uitdrukking / D, wat al die karakters verwyder behalwe syfers.

Nou kan jy direk na die tjek nommer. Alle maatskappye, kredietkaart uitreikers gebruik 'n unieke nommer formaat. In die voorbeeld is dit gebruik, en die kliënt nie nodig het om die naam van die maatskappy tree - dit word bepaal deur die aantal. Visa kaarte altyd begin met die nommers 4 en het 'n lengte van 13 of 16 syfers. MasterCard begin in die reeks van 51-55 met 'n lang nommer 16. As gevolg hiervan, ons kry die volgende uitdrukking:

Voor die verwerking van die bestelling kan verder die laaste syfers van die nommer, wat bereken is op die Luhn algoritme getoets word.

Verifieer telefoonnommer

Taak. Nagaan van die korrektheid van die ingevoerde telefoonnommer.

Besluit. Die nommer van syfers in die vaste en mobiele telefoonnommers wissel aansienlik, afhangende van die land, so universeel kyk met behulp van gereelde uitdrukkings, telefoonnommer korrek onmoontlik. Maar internasionale nommers het 'n streng formaat en perfek vir die beheer van die patroon. Selfs meer so dat meer en meer nasionale telefoon operateurs probeer om dieselfde standaard te voldoen. Kamer struktuur is soos volg:

+ CCC.NNNNNNNNNNxEEEE, waar:

- C - is die land code bestaande uit 1-3 syfers.

- N - aantal tot 14 syfers.

- E - opsionele uitbreiding.

Plus is 'n onontbeerlike element, en die teken X teenwoordig slegs wanneer dit nodig uitbreiding is.

As gevolg hiervan het ons die volgende uitdrukking:

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

Die getalle in die reeks

Taak. Dit is nodig om toeval heelgetal van 'n sekere reeks verseker. Daarbenewens is dit nodig om 'n gewone uitdrukking slegs die nommers van die reeks vind.

Besluit. Hier is 'n paar uitdrukkings om 'n paar van die mees algemene gevalle:

Bepaal uur 1-24 ^ (1 [0-2] | [1-9]) $
Dag in die maand 1-31 ^ (3 [01] | [12] [0-9] | [1-9]) $
Sekondes of minute 0-59 ^ [1-5]? [0-9] $
'N Aantal 1-100 * (100 |? [1-9] [0-9]) $
Dag van die jaar 1-366 ^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} |? [1-9] [0-9]) $

Soek IP-adresse

Taak. Dit is nodig om te bepaal of 'n gegewe string is 'n geldige IP-adres in IPv4-formaat in die reeks van 000.000.000.000-255.255.255.255.

Besluit. Soos met enige probleem in die taal van PHP, die gewone uitdrukking het baie varintov. Byvoorbeeld, hierdie:

Aanlyn nagaan van uitdrukkings

Check regex korrek vir beginners kan moeilik wees as gevolg van die kompleksiteit van die sintaksis, wat verskil van "gewone" programmeertale. Om hierdie probleem op te los, is daar baie aanlyn testers uitdrukkings wat maak dit maklik om die korrektheid van die sjabloon wat jy in die werklike teks geskep na te gaan. Die programmeerder gaan die uitdrukking en verifikasie data en dadelik sien die resultaat van die verwerking. Gewoonlik is daar aan te bied 'n naslaanafdeling, wat die gereelde uitdrukkings, voorbeelde en verskille implementering besonderhede vir die mees uitgebreide tale.

Maar om ten volle vertroue aanlyn dienste resultate nie aanbeveel vir alle ontwikkelaars wat PHP gebruik. 'N Gereelde uitdrukking is geskryf en geverifieer in persoon, verhoog kwalifikasie en waarborg die afwesigheid van foute.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 af.unansea.com. Theme powered by WordPress.