Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Televizori (Smart TV)
  • Php preg brojevi podudaranja. PHP (regex) - šta je to? Primjeri regularnog izraza i provjera valjanosti

Php preg brojevi podudaranja. PHP (regex) - šta je to? Primjeri regularnog izraza i provjera valjanosti

Kada rade s tekstovima na bilo kojem modernom programskom jeziku, programeri se stalno suočavaju sa zadacima provjere unesenih podataka da li su u skladu sa željenim uzorkom, pronalaženja i zamjene fragmenata testa i drugih tipičnih operacija za obradu simboličkih informacija. Razvoj vlastitih algoritama za verifikaciju dovodi do gubitka vremena, nekompatibilnosti programskog koda i složenosti u njegovom razvoju i modernizaciji.

Brzi razvoj Interneta i jezika za razvoj WEB-a zahtijevao je stvaranje univerzalnih i kompaktnih sredstava za obradu tekstualnih informacija s minimalnom količinom koda potrebnog za to. PHP jezik, koji je popularan među početnicima i profesionalnim programerima, nije izuzetak. Regularni izraz kao jezik šablona teksta omogućava pojednostavljenje zadataka obrade teksta i smanjenje programskog koda za desetine ili stotine redova. Bez toga se mnogi zadaci uopće ne mogu riješiti.

Regularni izrazi u PHP-u

PHP jezik sadrži tri mehanizma za rad sa regularnim izrazima - "ereg", "mb_ereg" i "preg". Najčešći je "preg" interfejs, čije funkcije omogućavaju pristup PCRE biblioteci regularnih izraza, prvobitno razvijenoj za jezik Perl, koji je uključen u PHP. Preg funkcije traže podudaranja u datom tekstualnom nizu prema određenom obrascu u jeziku regularnog izraza.

Osnove sintakse

U okviru kratkog članka nemoguće je detaljno opisati cjelokupnu sintaksu regularnih izraza, za to postoji posebna literatura. Evo samo glavnih elemenata koji pokazuju široke mogućnosti programera i razumiju primjere koda.

Formalno je to vrlo teško definisati, pa ćemo zato pojednostaviti opis. Regularni izraz je tekstualni niz. Sastoji se od razgraničenog predloška i modifikatora koji specificira kako se njime rukuje. U šablone je moguće uključiti različite alternative i ponavljanja.

Na primjer, u izrazu / \ d (3) - \ d (2) - \ d (2) / m separator će biti «/» , nakon čega slijedi uzorak i simbol "M"će biti modifikator.

Sva moć regularnih izraza je kodirana pomoću metakaraktera. Glavni metaznak jezika je obrnuta kosa crta - "\". On mijenja tip sljedećeg znaka u suprotan (to jest, običan znak postaje metaznak i obrnuto). Drugi važan metaznak je kosa crta "|", koja specificira alternative uzorku. Još primjera metakaraktera:

PHP tretira prostor kao poseban značajni karakter prilikom obrade regularnih izraza, tako da su izrazi ABCGDE i ABC WHERE različiti.

Podobrasci

U PHP-u, regularni podobrasci su zatvoreni u zagradama i ponekad se nazivaju "podizrazima". Oni obavljaju sljedeće funkcije:

    Isticanje alternativa... Na primjer, šablon vrućina (neke | ptica |) odgovara riječima "vrućina", "žarena ptica" i "pečenje"... A bez zagrada, to će biti samo prazan niz, "ptica" i "pečenka".

    "uzbudljiv" poduzorak. To znači da ako se podniz podudara u obrascu, onda se sva podudaranja vraćaju kao rezultat. Radi jasnoće, dajmo primjer. S obzirom na sljedeći regularni izraz: pobjednik prima ((zlato | pozlaćeno) (medalja | pehar)) - i niz za pronalaženje podudaranja: "Pobjednik dobija zlatnu medalju"... Pored originalne fraze, pretraga će vratiti: "Zlatna medalja", "medalja", "zlato".

Operatori ponavljanja (kvadrifikatori)

Prilikom pisanja regularnih izraza vrlo je često potrebno analizirati ponavljanje brojeva i simbola. Ovo nije problem ako nema mnogo ponavljanja. Ali šta ako ne znamo njihov tačan broj? U ovom slučaju morate koristiti posebne metaznakove.

Za opisivanje ponavljanja koriste se kvadrifikatori - metaznakovi za određivanje broja. Kvadrifikatori su dva tipa:

  • općenito, u zagradama;
  • skraćeno.

Uobičajeni kvantifikator specificira minimalni i maksimalni broj dozvoljenih ponavljanja elementa u obliku dva broja u vitičastim zagradama, na primjer: x (2.5). Ako je maksimalni broj ponavljanja nepoznat, drugi argument se izostavlja: x (2,).

Skraćeni kvantifikatori su znakovi za najčešća ponavljanja kako bi se izbjeglo nepotrebno preopterećenje sintakse. Obično se koriste tri skraćenice:

1. * - nula ili više ponavljanja, što je ekvivalentno (0,).

2. + - jedno ili više ponavljanja, tj.).

3.? - nula ili samo jedno ponavljanje - (0,1).

Primjeri regularnog izraza

Za svakoga ko uči regularne izraze, primjeri su najbolji vodič. Navest ćemo nekoliko koji pokazuju svoje široke mogućnosti uz minimum truda. Svi programski kodovi su u potpunosti kompatibilni sa PHP 4.x i novijim verzijama. Za potpuno razumijevanje sintakse i korištenje svih karakteristika jezika, preporučujemo knjigu J. Friedla "Regular Expressions", koja u potpunosti ispituje sintaksu i daje primjere regularnih izraza ne samo u PHP-u, već i za jezici Python, Perl, MySQL, Java, Ruby i C#.

Provjera ispravnosti E-mail adrese

Zadatak. Postoji web stranica koja od posjetitelja traži email adresu. Regularni izraz mora provjeriti valjanost primljene adrese prije slanja poruke. Verifikacija ne garantuje da navedeno poštansko sanduče zaista postoji i da prihvata pisma. Ali može ukloniti namjerno netačne adrese.

Rješenje. Kao i sa svakim programskim jezikom, u PHP-u se regularni izrazi za validaciju adrese e-pošte mogu implementirati na mnogo različitih načina, a primjeri u ovom članku nisu konačna i jedina opcija. Stoga ćemo u svakom slučaju dati listu zahtjeva koje je potrebno uzeti u obzir prilikom programiranja, a konkretna implementacija je u potpunosti na programeru.

Dakle, izraz za provjeru valjanosti e-pošte treba provjeriti sljedeće uslove:

  1. Prisustvo simbola @ u originalnom nizu i odsustvo razmaka.
  2. Domenski dio adrese, iza kojeg slijedi simbol @, sadrži samo važeće znakove za imena domena. Isto vrijedi i za korisničko ime.
  3. Prilikom validacije korisničkog imena potrebno je utvrditi prisutnost posebnih znakova kao što je apostrof ili. Takvi znakovi su potencijalno opasni i mogu biti sadržani u napadima kao što je SQL injekcija. Izbjegavajte takve adrese.
  4. Korisnička imena prihvataju samo jednu tačku, koja ne može biti prvi ili poslednji znak u redu.
  5. Ime domene mora sadržavati najmanje dva i ne više od šest znakova.

Primjer koji uzima u obzir sve ove uvjete može se vidjeti na donjoj slici.

Validacija URL-ova

Zadatak. Provjerite da li je dati tekstualni niz valjan. Imajte na umu da regularni izrazi za validaciju URL-a mogu biti implementirani na različite načine.

Rješenje. Naša konačna verzija izgleda ovako:

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

Sada analizirajmo njegove komponente detaljnije koristeći sliku.

Provjera brojeva kreditnih kartica

Zadatak. Potrebno je provjeriti ispravnost unesenog broja plastične kartice najčešćih platnih sistema. Razmatrana opcija samo za kartice

Rješenje. Prilikom kreiranja izraza morate uzeti u obzir moguće prisustvo razmaka u unesenom broju. Brojevi na kartici su podijeljeni u grupe radi lakšeg čitanja i diktata. Stoga je sasvim prirodno da osoba pokuša da unese broj na ovaj način (tj. koristeći razmake).

Pisanje generičkog izraza koji uzima u obzir moguće razmake i crtice je teže nego jednostavno odbaciti sve znakove osim brojeva. Stoga se preporučuje korištenje metaznaka / D u izrazu, koji uklanja sve znakove osim brojeva.

Sada možete ići direktno na provjeru broja. Sve kompanije za izdavanje kreditnih kartica koriste jedinstveni format broja. U primjeru se to koristi i kupac ne mora upisivati ​​naziv kompanije - on se identificira brojem. Visa kartice uvijek počinju sa 4 i imaju 13 ili 16 cifara. MasterCard počinje u rasponu 51-55 sa dužinom broja 16. Kao rezultat, dobijamo sljedeći izraz:

Prije obrade narudžbe možete dodatno provjeriti posljednju cifru broja koja se izračunava Luna algoritmom.

Provjeravanje brojeva telefona

Zadatak. Provjera ispravnosti unesenog broja telefona.

Rješenje. Broj cifara u brojevima fiksnih i mobilnih telefona značajno varira od zemlje do zemlje, tako da je nemoguće univerzalno provjeriti ispravnost telefonskog broja koristeći regularne izraze. Ali međunarodni brojevi imaju strogi format i odlični su za provjeru uzoraka. Štaviše, sve više nacionalnih telefonskih operatera pokušava da se pridržava jedinstvenog standarda. Struktura izdanja je sljedeća:

+ CCC.NNNNNNNNNNxEEEE, gdje:

C je 1-3 cifren kod zemlje.

N - broj do 14 cifara.

E je opciona ekstenzija.

Plus je obavezan, a x je prisutan samo kada je potrebno proširenje.

Kao rezultat, imamo sljedeći izraz:

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

Brojevi u rasponu

Zadatak. Morate osigurati da se cijeli broj iz specificiranog raspona podudara. Dodatno, potrebno je da regularni izrazi pronađu samo brojeve iz raspona vrijednosti.

Rješenje. Evo nekoliko izraza za nekoliko najčešćih slučajeva:

Pronalaženje IP adrese

Zadatak. Morate utvrditi da li je navedeni niz važeća IPv4 IP adresa u rasponu 000.000.000.000-255.255.255.255.

Rješenje. Kao i svaki zadatak u PHP-u, regularni izraz ima mnogo varijacija. Na primjer, nešto ovako:

Online provjera izraza

Provjera ispravnosti regularnih izraza može biti teška za programere početnike zbog složenosti sintakse, koja se razlikuje od "normalnih" programskih jezika. Da biste riješili ovaj problem, postoji mnogo online testera izraza koji vam omogućavaju da lako provjerite ispravnost kreiranog predloška na stvarnom tekstu. Programer unosi izraz i podatke za verifikaciju i trenutno vidi rezultat obrade. Obično postoji i referentni odjeljak, koji detaljno opisuje regularne izraze, primjere i razlike u implementaciji za najčešće programske jezike.

Ali potpuno povjerenje u rezultate online usluga ne preporučuje se svim programerima koji koriste PHP. Redovni izraz, napisan i testiran lično, je ažuran i zagarantovan je bez grešaka.

Najčešća upotreba regularnih izraza u Perlu je u operatorima pretraživanja i zamjene kao što su s //, m /, operatori skupa =~ ili != itd. Po pravilu, svi ovi operateri imaju slične opcije kao što su:

Ove opcije se obično nazivaju "/x". Mogu se koristiti čak i unutar šablona koristeći novu konstrukciju (?...)

Regularni izrazi ili obrasci su isti kao i Unix procedure regexp. Izrazi i sintaksa su posuđeni iz V8 besplatnih rutina Henryja Spencera i tamo su detaljno opisani.

Predlošci koriste sljedeće metaznakove (znakove koji predstavljaju grupe drugih znakova), koji se često nazivaju egrep standardom:

Metaznakovi imaju modifikatore (napisane nakon metaznaka):

U svim ostalim slučajevima, vitičaste zagrade se smatraju regularnim (regularnim) znakovima. Dakle, "*" je ekvivalentno (0,), "+" - (1,) i "?" - (0,1). n i m ne mogu biti veći od 65536.

Po defaultu, metaznakovi su pohlepni. Podudaranje se propagira što je više moguće puta, zanemarujući učinak sljedećih metakaraktera. Ako želite da im „smanjite apetit” koristite simbol „?”. Ovo ne mijenja značenje metakaraktera, samo smanjuje širenje. Na ovaj način:

Obrasci rade na isti način kao dvostruki navodniki, tako da možete koristiti `\` - znakove (znakove obrnute kose crte) u njima:

\ t - znak tab
\ n - nova linija
\ r - povratak kočije
\a - format prevoda
\ v - vertikalni jezičak
\ a - zovi
\ e - bijeg
\033 - oktalna notacija znaka
\ x1A - heksadecimalni
\ c [ - kontrolni karakter
\ l - mala slova sljedećeg znaka
\ u - velika slova -//-
\ L - sva mala slova do \ E
\ U - na vrhu - // -
\ E - ograničavač promjene registra
\ Q - poništavanje radnje kao metakaraktera

Dodatno, u Perl su dodani sljedeći metaznakovi:

Imajte na umu da je sve ovo "jedan" karakter. Koristite modifikatore da označite redoslijed. dakle:

Osim toga, postoje imaginarni metakarakteri. Označavanje nepostojećih znakova na mjestu gdje se vrijednost promijenila. kao što su:

Granica riječi (\ b) je zamišljena tačka između \ w i \ W znakova. Unutar klase znakova, "\ b" označava povratni znak. Metakarakteri \ A i \ Z- slično kao "^" i "$", ali ako su početak reda "^" i kraj reda "$" važeći za svaki red u višelinijskom redu, tada \ A i \ Z označava početak i kraj čitavog višelinijskog niza.

Ako se grupisanje (zagrade) koristi unutar obrasca, broj podniza grupe označava se kao "\ cifra". Imajte na umu da se iza obrasca unutar izraza ili bloka ove grupe nazivaju "$ cifra". Osim toga, postoje i dodatne varijable:

primjer:

$ s = "Jedan 1 Dva 2 i Tri 3"; if ($ s = ~ / (\ d +) \ D + (\ d +) /) (ispisati "$ 1 \ n"; # Rezultat "1" ispisati "$ 2 \ n"; # "2" ispisati " $ + \ n" ; # "2" print "$ & \ n"; # "1 dva 2" print "$` \ n "; #" Jedan "print" $ "\ n"; # "i tri 3" )

Perl verzija 5 sadrži dodatne konstrukcije šablona:

primjer:

$ s = "1 + 2-3 * 4"; if ($ s = ~ / (\ d) (? = -) /) # Pronađite cifru praćenu "-" (ispišite "$ 1 \ n"; # Rezultat "2") else (ispišite "greška pretraživanja \ n ";)

(?! obrazac) - gledanje naprijed negacijom:

primjer:

$ s = "1 + 2-3 * 4"; if ($ s = ~ / (\ d) (?! \ +) /) # Pronađite cifru iza koje nema "+" (ispisati "$ 1 \ n"; # Rezultat "2") else (ispisati " greška pretrage \ n ";)

(? ismx) - "interni" modifikatori. Pogodno je koristiti u predlošcima, gdje, na primjer, trebate navesti modifikator unutar predloška.

Pravila regularnog izraza. (regularni izraz)

  1. Svaki lik stoji za sebe, osim ako nije metaznak. Ako trebate poništiti metaznak, ispred njega stavite "\".
  2. Niz znakova označava niz tih znakova.
  3. Skup mogućih znakova (klasa) je zatvoren u uglastim zagradama "", što znači da se na ovom mjestu može pojaviti jedan od znakova naznačenih u zagradama. Ako je prvi znak u zagradama "^" - tada se nijedan od navedenih znakova ne može pojaviti na ovom mjestu u izrazu. Unutar klase, možete koristiti znak "-" da označite raspon znakova. Na primjer, a-z je jedno od malih slova latinice, 0-9 je broj, itd.
  4. PHP portal forum. SU

Regularni izrazi su vrlo moćan, ali u isto vrijeme teško razumljiv alat za obradu stringova. Opisaću glavne tačke. Regularni izraz je uzorak niza. Koristeći ovaj obrazac, možete tražiti pojavljivanja, vršiti zamjene, provjeriti podudaranje uzorka.

Pravila sastavljanja uzoraka

Granice šablona treba da budu označene određenim simbolima, često koristite " / "ali ja radije koristim" # "jer obilje kosih crta naprijed/nazad može učiniti da vaše oči izgledaju grozno, a "rešetke" se obično ne koriste nigdje drugdje. Dakle:" #RegularExpressionBody #"

Unutar regularnog izraza koriste se zagrade - to su podizrazi kojima se može manipulirati, na primjer:

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

Ovaj izraz služi za dobivanje parametara u nizu Url... Na početku reda nalazi se poseban znak " ^ "- ovo znači početak reda. Sljedeće dolazi" / katalog /"- nema posebnih znakova, ovo je samo tekst koji bi trebao biti sadržan u nizu. Tada su se susreli u zagradama, odnosno došli su do prvog podizraza. Uglaste zagrade označavaju skup karaktera koji može biti u nizu na ovom mjestu . Potpiši" - "znači nabrajanje. Znak" \ "izbjegava specijalne znakove. Dakle, u prvom podizrazu možemo imati VELIKA i mala slova latinice, brojeve od 0 do 9, donju crtu, crticu i tačku. Crtica i tačka su specijalni znakovi, ali ovdje se izbjegavaju, pa ovdje su to samo simboli. Nakon uglastih zagrada nalazi se " + "- to znači da prethodni znak (a mi imamo ovaj skup znakova u uglastim zagradama) može ići 1 ili više puta. Zatim dolazi" / "je samo lik, i sličan drugi podizraz. Onda dolazi" \ .html"što znači tekst" .html". A onda specijalni znakovi" .* "tačka znači bilo koji znak, a zvjezdica znači bilo koju količinu prethodnog znaka. To jest, poslije" .html„sve može proći.

Indikacija količine, kvantifikatori

Iznad smo već razmatrali takve znakove koji označavaju broj prethodnih znakova, kao npr + i * ... Evo svih mogućnosti za određivanje količine:

Posebni znakovi

Postoje posebne skraćenice za neke grupe znakova:

"pohlepa"

Hajde da pogledamo pojam pohlepe za regex. Na primjer, postoji linija:

#()#

Čitamo: podizraz:

Ako je sve ispravno, podizraz se podudara:

Ali takođe odgovara:

Dobićemo to, jer regularni izrazi su po defaultu pohlepni. Možete ukloniti pohlepu pomoću modifikatora " U", Volim ovo:

#() #U

Modifikatori

Regularni izraz može biti praćen modifikatorima: " #ThereRegularExpressionBody #ThatModifiers"Vrste modifikatora:

i Uključuje način rada bez obzira na velika i mala slova, tj. velika i mala slova se ne razlikuju u izrazu.
m Označava da se tekst koji se traži treba tretirati kao više redova. Po zadanim postavkama, mehanizam regularnih izraza tretira tekst kao jedan niz, bez obzira na to kakav je on u stvari. Shodno tome, metaznakovi "^" i "$" označava početak i kraj cijelog teksta. Ako je ovaj modifikator naveden, onda će oni pokazivati ​​na početak i kraj svakog reda teksta, respektivno.
s Zadani metaznak " . "ne uključuje znak za prijelaz na red u svoju definiciju. Navođenje ovog modifikatora uklanja ovo ograničenje.
U Uklanja pohlepu regularnog izraza
u Omogućava rad sa regularnim izrazima Ćirilica u UTF-8, inače ne radi ispravno.

php Funkcije za rad sa regularnim izrazima

preg_replace

Pronađite i zamijenite:

Preg_replace (mješoviti $ obrazac, mješoviti $ zamjena, mješoviti $ subjekt [, int $ limit = -1 [, int & $ count]]);

Svaka vrijednost može biti string ili niz, u slučaju slučaja $ predmet niz - vraća se niz, inače string

preg_split

Dijeli string po regularnom izrazu:

Preg_split (string $ pattern, string $ subject [, int $ limit = -1 [, int $ flags = 0]]);

Vraća niz podstringova datog niza predmet koji je razbijen duž granica koje odgovaraju uzorku uzorak.

Počnimo od toga šta je regex. Evo odgovora na moje pitanje, postoji li slovo "e" u riječi "test"? "Tu je!" ti kažeš. Onda vam postavljam drugo pitanje, kako ste našli slovo "e" u reči "test"? Odgovor je očigledan, uzimamo prvi znak, odnosno "t" i uporedimo ga sa onim što tražimo, odnosno sa "e". Ako nisu jednaki, onda uzimamo drugi znak, odnosno "e", uporedimo ga sa onim što tražimo, odnosno "e". Voila! Podudaranje je pronađeno. Odgovor: Riječ "test" sadrži slovo "e".

Sada mi odgovorite na još jedno pitanje, gdje je regularni izraz u ovom primjeru? Nadam se da ste pogodili da je regularni izraz ono što tražimo u riječi "test". To jest, slovo "e" u ovom primjeru je regularni izraz.

Za šta se koriste regularni izrazi u php-u? U mojoj praksi, regularni izrazi su korišteni, na primjer, da se utvrdi da li je adresa e-pošte dobro oblikovana. Takvi izrazi se također koriste za utvrđivanje ispravnosti korisničkog imena i lozinke. Koristeći regularne izraze, možete pronaći adresu na linku i sačuvati je. Mnogo stvari koje možete učiniti. Analizirajući ovo, možete identificirati glavnu funkciju regularnih izraza i dvije sporedne. Glavna funkcija, ovo je traženje podudaranja u nizu. Nuspojave su spremanje pronađenih podudaranja i njihova zamjena.

Prvi regularni izraz

U teoriji, razumijemo kako pronaći simbol "e" u riječi "test", kako se to implementira u praksi? Za korištenje regularnih izraza u php-u obično se koriste sljedeće funkcije:

preg_match ("regularni izraz (uzorak)", "varijabla u kojoj se vrši pretraga", "varijabla u kojoj se pohranjuje rezultat pretraživanja (opcijski parametar)"); - Funkcija podudaranja
preg_replace ("regularni izraz (uzorak)", "Čime zamijeniti pronađeno podudaranje", "varijabla u koju zamijeniti"); - Funkcija zamjene

Počnimo koristiti ove funkcije .. Evo primjera pronalaženja znaka "e" u riječi "test":

$ a = "test";
if (preg_match ("/ e /", $ a)) echo "pronađeno !!";

Kôd opisuje stanje, ako se nešto nađe u varijabli $ a pomoću uzorka, onda se prikaže poruka "pronađeno !!" Kao što vidite, naš obrazac je između dva "/". U ovom slučaju, "/" simbolizira početak i kraj našeg šablona... Nadam se da je ovo jasno.

Sve ovo je naravno zanimljivo... ali to je samo naš šablon, koji je vrlo jednostavan, zar ne? Na kraju krajeva, rijetko moramo pronaći neki simbol u varijabli. U većini slučajeva moramo pronaći mnogo simbola, štaviše, nepoznatih. Kako biti? Postavimo sebi problem i pokušajmo ga riješiti. Pretpostavimo da imamo niz koji se sastoji od brojeva i jednog nepoznatog engleskog slova

Kako pronalazite ovo pismo? Može postojati bilo koje slovo engleskog alfabeta, kako ga možete definirati? Sami ste odgovorili na svoje pitanje, postoji bilo koje slovo, odnosno ono je u rasponu od a do z. Opsezi se mogu koristiti u regularnim izrazima. Ako ne znamo koji znak tražimo, ali sigurno znamo da je ovaj znak slovo engleske abecede, tada će zapis biti sljedeći:

$ a = "123a321";
if (preg_match ("//", $ a)) echo "pronađeno!!";

Imajte na umu da je opseg zatvoren u zagradama "[" "]". Sve što je u takvim zagradama definisano je kao jedan znak, u ovom slučaju znak se kreće od a do z. Ako trebamo pronaći ne slovo, već broj, tada će zapis biti ovakav:

$ a = "abc1cba";
if (preg_match ("//", $ a)) echo "pronađeno!!";

Takođe želim da napomenem da su regularni izrazi osjetljivi na velika i mala slova, pa su znakovi "A" i "a" potpuno različiti, za traženje tih i tih znakova pišu ovako:

$ a = "123a321";
if (preg_match ("//", $ a)) echo "pronađeno!!";

Postoji i pretraga ruskih slova, vrši se na isti način kao i kod engleskog:

$ a = "123y321";
if (preg_match ("/ [a-za-z] /", $ a)) echo "pronađeno !!";

Metakarakteri

Naučili smo kako tražiti nepoznati karakter u nizu. Šta ako trebamo pronaći nekoliko simbola? Takozvani metaznakovi dolaze u pomoć... Pretpostavimo da imamo niz sa brojevima, slovima, kako to opisati u šablonu? Ti to možeš:

niz - 123a321
uzorak -

Hmm... predložak zaista odgovara našem nizu, a kada se provjeri usklađenost, dat će dugo očekivanu istinitost! Ali neka vrsta glomaznog snimanja, zar ne?

Evo kako ga možete skratiti:

niz - 123a321
uzorak - *

Čini mi se tako kraće Šta je simbol "*"? Ovo je sam metaznak, znači da se karakter koji smo opisali (naime, znak koji može sadržavati brojeve od 0 do 9 ili slova engleske abecede, od a do z) može ponavljati neograničeno, ili više puta. Da da! Ovaj metaznak će se podudarati u praznoj varijabli, budući da će čak i odsustvo simbola koji smo opisali vratiti true! Zapamtite ovo

Koji drugi metaznakovi postoje?

Na primjer, metaznak "+" Skoro je sličan metaznaku "*" sa jednim malim izuzetkom. "*" će vratiti true čak i ako nema znaka, a "+" će provjeriti prisustvo barem jednog znaka. Odnosno, ako niz zahtijeva prisustvo minimum jedan znak, a zatim koristite "+" umjesto "*"

Metaznak "?" To znači da niz ne smije sadržavati više od jednog potrebnog znaka. Dozvolite mi da vam dam nekoliko primjera za posljednja dva metaznaka koja sam opisao.

Pretpostavimo da trebamo provjeriti je li korisnička lozinka tačna. Razmislimo o tome šta bi korisnička lozinka trebala sadržavati? Pa, prvo, mora biti barem jedan znak. Drugo, trebalo bi da sadrži samo brojeve i slova engleske abecede, pa će regularni izraz izgledati ovako:

$ a = "qwerty12345";

Koje znakove smo dozvolili? Engleska slova bilo kojeg registra i brojeva. Sada pokušajte ostaviti prazan red umjesto lozinke.

$ a = "";
if (preg_match ("/ + /", $ a)) echo "Lozinka je ispravna";

Nećete vidjeti poruku "Lozinka je ispravna". Zašto? Zato što je metaznak "+" provjeravao da string sadrži najmanje jedan znak.

A sad mali trik, da pogledamo naš izraz lica, nismo dozvolili, recimo, prostora u njemu, zar ne? stavite razmak na kraj lozinke i pokrenite

$ a = "qwerty12345";
if (preg_match ("/ + /", $ a)) echo "Lozinka je ispravna";

I zašto vidimo našu poruku o ispravnoj lozinki? Prilično jednostavno ... funkcija preg_match (); zaustavlja svoju provjeru pri prvom meču. Odnosno, znak "q" odgovara uzorku koji smo mi opisali, a sve ostalo više nije važno za funkciju. Pa šta da radimo? Evo kako to popraviti:

$ a = "qwerty12345";
if (preg_match ("/ ^ + $ /", $ a)) echo "Lozinka je ispravna";

Dodavanjem "^" na početak izraza i "$" na kraju, kažemo funkciji da odgovara uzorku. sve linija. Ako pokrenete ovaj kod, nećete vidjeti poruku, jer kraj lozinke sadrži nevažeći znak - razmak

Sada promijenite metaznak "+" u "?" Šta mislite da će se dogoditi? Ispravna poruka o ispravnosti lozinke će izostati, jer lozinka sadrži više od jednog karaktera. Nadam se da sam pravilno objasnio kako ova tri najčešće korišćena metaznaka funkcionišu.

Ponekad je bolje "ne".

U najmanju ruku, naučili smo kako provjeriti ispravnost lozinke, i to je dobro! Dozvolite mi da vam ispričam još jedan način da pronađete nešto u nizu. Recimo da trebamo provjeriti da nema brojeva u nizu. Kako uraditi? Evo linije:

(Namjerno sam u njega uveo ove simbole "-_ + ()" kako život ne bi izgledao kao med...) Mogli bismo sastaviti sljedeći izraz:

Ali morate se složiti, jer ne znamo uvijek koji se znakovi koriste u nizu, ali sigurno znamo da u njemu ne bi trebalo biti brojeva! Stoga bi bilo logičnije jednostavno napisati šablon koji bi preskakao redove u kojima br cifre, a ne one u kojima postoji "O moj Bože, koliko neshvatljivih simbola !!!"... Evo primjera dobro oblikovanog izraza za takve zadatke:

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

Kako smo to postigli? Uveli smo simbol ali! kapa "^" ([^ 0-9]) postavljena na početku znači da linija ovog znaka sadrži ne bi trebalo Nadam se da smo to shvatili

Pa, da završimo malo... Navest ću dva primjera sa objašnjenjima, tokom kojih ćemo naučiti kako sačuvati rezultat pretrage u varijablu, te naučiti kako provjeriti ispravnost poštanske adrese

Video sam, sačuvao sam!

Moj blog

$ a = " Moj blog";
preg_match ("/ / ", $ a);

U našem regularnom izrazu opisali smo sve moguće znakove koji se mogu uključiti u vezu. Takođe želim da skrenem pažnju na navodnike i "/" u našem izrazu.. Ispred njih je obrnuta kosa crta, čemu služi? Poenta je da su "/" i navodnik sami po sebi posebni znakovi. A da bi ih predložak percipirao kao obične simbole, moramo ih ekranizirati. Provjera se vrši dodavanjem obrnute kose crte ispred posebnih znakova. Nadam se da je jasno

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

Pa, u skladu s tim, trebate dodati dodatni parametar u obliku varijable $ b, u koji će se pohraniti pronađena veza. Također morate znati da je rezultat pretraživanja smješten u niz. Dakle, varijabla $ b je niz. Informacije koje tražimo nalaze se pod indeksom 1. To znači da je rezultat pretrage u varijabli $ b. prikazaćemo rezultat na ekranu:

$ a = " Moj blog";
preg_match ("/ / ", $ a, $ b);
echo $ b;

Tačna adresa je ključ uspjeha!

Pa, na sljedeći korak, odgovor na pitanje, da li je e-mail tačan? Prvo, morate znati koji su znakovi dozvoljeni u adresama? Koliko ja znam, dozvoljeni znakovi uključuju:

  • Engleska slova, brojevi, "_", "-" emmmm kao i sve... Krenimo od ovoga.
  • Zatim imamo "@"
  • Poslije engleska slova
  • Dalje, poenta
  • I opet engleska slova...

Dakle, regularni izraz će biti sljedeći:

$ a = " [email protected]";
if (preg_match ("/ ^ [email protected]+. + $ / ", $ a)) echo" Adresa e-pošte je tačna! ";
else echo "Adresa e-pošte NIJE tačna!";

Pa... nadam se da vas ovakvi zapisi sada ne plaše i da ih sasvim razumete.

U nastavku, želim nešto reći. Članak se pokazao glomaznim, a istovremeno je pokrivao samo dio mogućnosti. Ako čitate ovu rečenicu, onda ste je najvjerovatnije pročitali do kraja, na čemu vam puno hvala

Što se tiče ciklusa članaka o razvoju cms bloga, prvi dio ciklusa Objavljujem da je zatvoreno! U bliskoj budućnosti ćemo početi sa implementacijom admin panela, tako da nemojte "prebacivati" Ako imate pitanja, rado ću odgovoriti. Svaka cast, imam sve!

Top srodni članci