PHP (säännöllinen lauseke) - mitä se on? Esimerkkejä ja säännöllisten lausekkeiden tarkistaminen

tietokoneet

Kun työskentelet tekstien kanssa kaikilla modernilla kielilläohjelmoijien kehittäjät joutuvat jatkuvasti käsittelemään syötettyjä tietoja halutun mallin noudattamiseksi, etsimällä ja korvaamalla koepalat ja muut tyypilliset toiminnot symbolisen informaation käsittelyyn. Omien vahvistusalgoritmien kehittäminen johtaa ajan menetykseen, ohjelmakoodin yhteensopimattomuuteen ja vaikeuksiin sen kehittämisessä ja modernisoinnissa.

Internetin nopea kehitys ja kielet WEB-kehitysvaadittiin luomaan yleismaailmallisia ja pienikokoisia teksti-informaation käsittelyvälineitä siten, että vaadittavan koodin vähimmäismäärä on tarpeen. PHP ei ole poikkeus ja suosittu aloittelijoille ja ammattimaisille kehittäjille. Säännöllinen ilmaus tekstinäkuvien kielellä sallii sinun yksinkertaistaa tekstinkäsittelytehtäviä ja vähentää ohjelmakoodia kymmeniä ja satoja rivejä käyttäen. Monia ongelmia ei voida ratkaista ilman häntä.

php säännöllinen lauseke

PHP säännölliset lausekkeet

PHP-kielellä on kolme mekanismia, joiden kanssa työskenteletsäännölliset lausekkeet ovat "ereg", "mb_ereg" ja "preg". Yleisin on "preg" -rajapinta, jonka toiminnot tarjoavat pääsyn PCRE: n säännölliseen lausekkeen tukikirjastoon, joka on alunperin kehitetty Perl-kielelle, joka sisältyy PHP-pakettiin. Preg-funktioita etsitään tietyn tekstin merkkijonoon tietyn mallin mukaan säännöllisten lausekkeiden kielellä.

Perus syntaksi

säännöllisiä lausekkeita

Lyhyessä artikkelissa on mahdotonta yksityiskohtiakuvaile säännöllisten lausekkeiden koko syntaksia, sillä tässä on erityinen kirjallisuus. Esittelemme vain peruselementtejä, jotka osoittavat laajat mahdollisuudet kehittäjälle ja koodin esimerkkien ymmärtämiseen.

PHP: ssä säännöllinen lauseke on muodollisesti määriteltyhyvin vaikeaa, ja siksi yksinkertaistaa kuvausta. Säännöllinen ilmaus on tekstijono. Se koostuu rajatusta mallista ja modifioijasta, joka ilmaisee sen käsittelemisen. Ehkäpä sisällyttäminen eri vaihtoehtojen ja toistojen malliin.

Esimerkiksi ilmaisussa / d {3} -d {2} -d {2} / m erotin on "/"jota seuraa malli ja symboli «M» on modifioija.

Kaikki säännöllisten lausekkeiden voimat on koodattukäyttäen metakaraktereja. Kielen tärkein metakarakterti on "-". Se muuttaa sen jäljessä olevan merkin tyypin vastakkaiseen suuntaan (eli tavallinen merkki muuttuu metakarakteriksi ja päinvastoin). Toinen tärkeä metakarakteri on eteenpäin oleva palkki "|", joka määrittää mallin vaihtoehtoiset muunnelmat. Lisää esimerkkejä metakaraktereista:

^Kohteen tai rivin alku
(Alamalli alkaa
)Alamalli päättyy
{Kvantifiointi alkaa
}Quantifier End
ddesimaaliluku 0 - 9
Dmikä tahansa ei-numeroinen merkki
styhjä merkki, tila, välilehti
wsanaston symboli

Kun säännöllisiä lausekkeita käsitellään, PHP käsittelee tilaa erillisenä merkitsevänä merkkinä, joten ABWGDE ja ABC WHERE ovat erilaisia.

subpatterns

PHP: ssä säännölliset osa-alueet on merkitty sulkeilla ja niitä kutsutaan joskus "alikomuiksi". Suorita seuraavat toiminnot:

  1. Korostavat vaihtoehtoja. Esimerkiksi kuvio lämpö (jotkut | lintu |) vastaa sanoja "Heat", "firebird" ja «Kuumaa». Ja ilman sulkeita se on vain tyhjä merkkijono, "lintu" ja "kuuma".

  2. "Houkutteleva" alikuvio. Tämä tarkoittaa, että jos kuvio vastaa substraatiota, kaikki ottelut palautetaan tuloksena. Selkeyden vuoksi annamme esimerkin. Ottaen huomioon seuraavan säännöllisen lausekkeen: voittaja saa ((kulta | kullattu) (mitali | kuppi)) - ja merkkijono löytääkseen ottelut: "Voittaja saa kultamitalin". Alkuperäisen lauseen lisäksi hakutulos annetaan "Kultamitali", "Mitali", "kulta".

Toistetaan operaattorit (quadrifiers)

Kun kirjoitat säännöllisiä lausekkeita hyvin useinon tarpeen analysoida numeroiden ja symbolien toistoja. Tämä ei ole ongelma, jos toistoja ei ole kovin monta. Mutta mitä tehdä, kun emme tiedä niiden tarkkaa määrää? Tässä tapauksessa sinun on käytettävä erikoismerkkejä.

Toistojen kuvaamiseksi käytetään kvadriereitä - metakoodeja numeron määrittämiseksi. Karsintoja on kahdenlaisia:

  • yhteiset kiinnikkeet;
  • vähenee.

Yleinen kvantifioija koskettaa vähimmäismäärää jaElokuvan sallittujen toistojen lukumäärä kahden numeron muodossa kierteisissä suluissa, esimerkiksi: x {2.5}. Jos toistojen enimmäismäärä ei ole tiedossa, toista argumenttia ei ole määritetty: x {2,}.

Lyhennetyt kvantitatiivit ovat symboleja yleisimpiä toistoja varten tarpeettoman syntaksin ylikuormituksen välttämiseksi. Kolme lyhennettä käytetään yleisesti:

1. * - nolla ja useampia toistoja, jotka vastaavat {0,}.

2. + - yksi tai useampia toistoja, eli {1,}.

3.? - nolla tai vain yksi toisto - {0,1}.

Säännölliset lausekkeet

Niille, jotka opiskelevat säännöllisiä lausekkeita,esimerkkejä ovat paras opetusohjelma. Mainitsemme useita, jotka osoittavat niiden laajat mahdollisuudet pienellä vaivalla. Kaikki ohjelmistokoodit ovat täysin yhteensopivia PHP 4.x ja uudempien versioiden kanssa. Täydellinen käsitys kielen kaikkien ominaisuuksien syntaksista ja käytöstä suosittelemme kirjaa J. Friedl "Säännölliset lausekkeet", jossa syntaksi on täysin otettu huomioon, ja on olemassa esimerkkejä säännöllisistä lausekkeista paitsi PHP: ssä, myös Python, Perl, MySQL, Java, Ruby ja C #.

Sähköpostiosoitteen tarkistaminen

Tehtävä. Siellä on web-sivuVierailijaa pyydetään lähettämään sähköpostiosoite. Tavanomaisen lausekkeen on tarkistettava vastaanotetun osoitteen oikeellisuus ennen viestien lähettämistä. Tarkistus ei takaa, että määritetty postilaatikko on todella olemassa ja hyväksyy kirjeitä. Mutta voimme poistaa selvästi väärät osoitteet.

Ratkaisu. Kuten kaikki PHP: n ohjelmointikieletSähköpostiosoitteen tarkistuksen säännölliset lausekkeet voidaan toteuttaa eri tavoin, ja tässä artikkelissa esitetyt esimerkit eivät ole lopullinen ja ainoa vaihtoehto. Siksi annamme kussakin tapauksessa luettelon vaatimuksista, jotka on otettava huomioon ohjelmoinnissa, ja erityinen toteutus on täysin riippuvainen kehittäjästä.

Sähköpostin voimassaoloa tarkistavan lausekkeen tulisi siis tarkistaa seuraavat ehdot:

  1. @ -Merkin alkuperäinen rivi ja välilyöntien puuttuminen.
  2. Osoitteen verkkotunnuksen osa @ -merkin jälkeen sisältää vain kelvollisia merkkejä verkkotunnuksille. Sama koskee käyttäjätunnusta.
  3. Käyttäjätunnusta tarkistettaessa on tarpeenmäärittää erikoismerkkien, kuten apostrofin tai pystysuoran palkin, läsnäolon. Tällaiset merkit ovat mahdollisesti vaarallisia, ja ne löytyvät tällaisista hyökkäyksistä SQL-injektioina. Vältä tällaisia ​​osoitteita.
  4. Käyttäjätunnukset sallivat vain yhden pisteen, joka ei voi olla merkkijonon ensimmäinen tai viimeinen merkki.
  5. Verkkotunnuksessa on oltava vähintään kaksi ja enintään kuusi merkkiä.

Esimerkki, joka ottaa huomioon kaikki määritellyt olosuhteet, näkyy alla olevassa kuvassa.

php: n säännölliset lausekkeet

Vahvista URL-osoitteet

Tehtävä. Tarkista, onko määritetty tekstirivi kelvollinen URL-osoite. Huomautamme jälleen, että säännölliset URL-tarkistuslausekkeet voidaan toteuttaa eri tavoin.

Ratkaisu. Lopullinen versio näyttää tältä:

/^(https?://)?( sellisteen.- […]. ([…] - s. Page (2,6) [] / [/ w .-] *) * /? $ /

Nyt analysoimme sen komponentit yksityiskohtaisemmin käyttäen kuvaa.

säännölliset lausekkeet URL-osoite

Patenttivaatimuksen 1URL-osoitteen edessä ei saa olla merkkejä
Vaatimuksen 2Tarkistamme pakollisen etuliitteen "http" läsnäolon
tuote 3Merkkejä ei pitäisi olla
Vaatimuksen 4Jos "s" on läsnä, URL osoittaa turvallisen "https" -yhteyden.
Vaatimuksen 5Vaadittu fragmentti "//"
Vaatimuksen 6Ei merkkejä
s. 7-9Ensimmäisen tason toimialueen validointi ja pisteen läsnäolo
p.10-13Toisen tason verkkotunnuksen ja pisteen oikeinkirjoituksen hallinta
p.14-17

URL-tiedoston rakenne - joukko numeroita, kirjaimia, alaviivoja, väliviivoja, jaksoja ja viivan lopussa

Tarkista luottokorttinumerot

Tehtävä. Yleisimpiä maksujärjestelmiä varten on syytä toteuttaa validoidun muovikortin numero. Vaihtoehtoja pidetään vain Visa- ja MasterCard-kortteina.

Ratkaisu. Kun luot lauseketta, sinun on harkittavavälilyöntien mahdollinen esiintyminen syötetyssä numerossa. Kortin numerot on jaettu ryhmiin lukemisen ja sanelun helpottamiseksi. Siksi on luonnollista, että henkilö voi yrittää syöttää numeron tällä tavalla (eli käyttämällä välilyöntejä).

Kirjoita yleinen ilmaisu, joka ottaa huomioonmahdolliset tilat ja väliviivat ovat vaikeampia kuin vain merkkien pudottaminen lukuun ottamatta numeroita. Siksi lauseketta suositellaan käyttämään metakarakteristiä / D, joka poistaa kaikki merkit lukuja lukuun ottamatta.

Nyt voit mennä suoraantarkistaa numerot. Kaikki luottokorttiyhtiöt käyttävät ainutlaatuista numeromuotoa. Esimerkissä sitä käytetään, eikä asiakkaan tarvitse syöttää yrityksen nimeä - se määräytyy numeron mukaan. Visa-kortit alkavat aina 4: stä ja niiden pituus on 13 tai 16 numeroa. MasterCard alkaa välillä 51-55 ja numero 16. Tämän seurauksena saamme seuraavan ilmaisun:

säännöllisiä lausekkeita

Ennen tilauksen käsittelyä voit tarkistaa numeron viimeisen numeron, joka lasketaan Luna-algoritmilla.

Puhelinnumeroiden tarkistaminen

Tehtävä. Tarkista syötetyn puhelinnumeron oikeellisuus.

Ratkaisu. Numeroiden lukumäärä kiinteässä ja matkaviestimessäpuhelinnumerot vaihtelevat huomattavasti maittain, joten puhelinnumeron oikeellisuutta ei ole yleisesti mahdollista tarkistaa säännöllisten lausekkeiden avulla Kansainvälisillä numeroilla on kuitenkin tiukka muoto ja ne sopivat hyvin kuvion tarkistamiseen. Lisäksi yhä useammat kansalliset puhelinoperaattorit yrittävät täyttää yhden standardin. Numeron rakenne on seuraava:

+ CCC.NNNNNNNNNNNEEEEEE missä:

- C on 1–3-numeroinen maakoodi.

- N - numero enintään 14 numeroa.

- E - valinnainen laajennus.

Plus on vaadittu elementti, ja x on läsnä vain, kun laajennusta tarvitaan.

Tämän seurauksena meillä on seuraava ilmaus:

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

Numerot alueella

Tehtävä. On välttämätöntä varmistaa, että kokonaisluku tietystä alueesta vastaa. Lisäksi sinun on löydettävä säännölliset lausekkeet vain numeroarvoista eri arvoista.

Päätös. Seuraavassa on muutamia yleisiä tapauksia:

Määritä tunti 1: stä 24: een^ (1 [0-2] | [1-9]) $
Päivä 1-31^ (3 [01] | [12] [0-9] | [1-9]) $
Toinen tai minuutti 0-59^ [1-5]? [0-9] $
Numero 1 - 100^ (100 | [1-9]? [0-9]) $
Vuosi 1-366^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} | [1-9] [0-9]?) $

IP-osoitteen haku

Tehtävä. On tarpeen määrittää, onko määritetty merkkijono kelvollinen IPv4-IP-osoite alueella 000 000 000 000-255.255.255.255.

Ratkaisu. Kuten kaikissa PHP-kielen ongelmissa, tavallisessa lausekkeessa on monia muunnelmia. Esimerkiksi:

säännölliset lausekkeet

Online-ilmaisun tarkistus

sähköpostitse säännöllisesti

Tarkista säännölliset lausekkeet oikeellisuudestaAloittelijoiden ohjelmoijat voivat olla vaikeita syntaksin monimutkaisuuden vuoksi, joka poikkeaa "tavallisista" ohjelmointikielistä. Tämän ongelman ratkaisemiseksi on olemassa monia online-ilmaisutestereitä, joiden avulla voit helposti tarkistaa luodun mallin oikeellisuuden oikeassa tekstissä. Ohjelmoija syöttää lausekkeen ja tiedot tarkistaakseen ja heti näkemään käsittelyn tuloksen. Yleensä on myös referenssiosio, joka kuvaa yksityiskohtaisesti säännöllisiä lausekkeita, esimerkkejä ja toteutuseroja yleisimpiä ohjelmointikieliä varten.

Mutta luota täysin online-palvelujen tuloksiin.ei suositella kaikille kehittäjille, jotka käyttävät PHP: tä. Säännöllinen ilmaisu, joka on kirjoitettu ja testattu henkilökohtaisesti, parantaa pätevyyttä ja takaa virheitä.