TietokoneetOhjelmointi

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

Kun työskentelet tekstien kanssa missä tahansa modernissa ohjelmointikielessä, kehittäjät täyttävät jatkuvasti tehtävät, joilla tarkennetaan syötettyjen tietojen yhteensopivuutta vaaditun mallin kanssa, etsimällä ja korvaamalla testin palasia ja muita tyypillisiä toimintoja symbolitietojen käsittelyä varten. Oman todentamisen algoritmien kehittäminen johtaa ajan menetykseen, ohjelman koodin yhteensopimattomuuteen ja monimutkaisuuteen sen kehittämisessä ja modernisoinnissa.

Internetin ja WEB-kehityksen kielten nopea kehitys edellytti yleisluonteisten ja pienikokoisten tekstinkäsittelylaitteiden luomista, mikä edellytti vähimmäismäärä koodia. PHP-kieli ei ole poikkeus, ja se on suosittu aloittelijoille ja ammattimaisille kehittäjille. Säännöllinen ilmaus tekstipohjojen kielenä voit yksinkertaistaa tekstinkäsittelyn tehtävää ja vähentää ohjelmakoodia kymmeniä ja satoja rivejä käyttäen. Monia tehtäviä ei voida ratkaista ilman sitä.

Säännölliset lausekkeet PHP: ssä

PHP-kielellä on kolme mekanismia säännöllisten lausekkeiden käsittelemiseen: "ereg", "mb_ereg" ja "preg". Yleisimpiä ovat "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-toiminnot hakevat haun tietyllä tekstin merkkijonolla tietyn mallin mukaan säännöllisten lausekkeiden kielellä.

Syntaksin perusteet

Lyhyen artikkelin puitteissa on mahdotonta kuvata yksityiskohtaisesti säännöllisten lausekkeiden koko syntaksia, tähän tarkoitukseen on olemassa erityinen kirjallisuus. Seuraavassa on vain peruselementtejä, joiden avulla kehittäjä voi laatia monenlaisia mahdollisuuksia ja ymmärtää koodin esimerkkejä.

PHP: ssä säännöllinen ilmentymä on muodollisesti määritelty erittäin vaikeaksi, ja siksi yksinkertaistetaan kuvausta. Säännöllinen ilmaus on tekstijono. Se koostuu rajatusta mallista ja modifioijasta, joka ilmaisee sen käsittelemisen. On mahdollista sisällyttää erilaisia vaihtoehtoja ja toistoja malleihin.

Esimerkiksi lausekkeessa / \ d {3} - \ d {2} - \ d {2} / m, erotin on "/" , sitten malli menee, ja "m" -merkki on muunnin.

Kaikki säännöllisten lausekkeiden voimat koodataan metakaraktereilla. Kielen tärkein metakarakteri on kääntöviiva - "\". Se muuttaa merkkijonon tyyppiä sen jälkeen vastakkaiseen (eli tavallinen merkki muuttuu metakarakteriksi ja päinvastoin). Toinen tärkeä metakarakteri on suora viiva "|", joka määrittää mallin vaihtoehtoiset variantit. Lisää esimerkkejä metakaraktereista:

^ Kohteen tai merkkijonon alku
( Alatyypin alku
) Subpatternin loppu
{ Kvantisoijan alkuperä
} Kvantifioinnin loppu
\ D Desimaaliluku 0 - 9
\ D Mikä tahansa merkki, joka ei ole numero
\ S Tyhjä merkki, tila, välilehti
\ W Sanakirjan merkki

PHP, säännöllisten lausekkeiden käsittely, pitää tilaa erillisenä merkittävänä symbolina, joten ilmaisut ABCDEF ja ABC WHERE ovat erilaisia.

subpatterns

PHP: ssä säännölliset osamuodot jaetaan suluihin ja niitä kutsutaan joskus "alikomuiksi". Suorita seuraavat toiminnot:

  1. Vaihtoehtojen jakaminen . Esimerkiksi lämpökuvio (jotain | lintu |) on sama kuin sanat "lämpö", "tulipalo" ja "paahto" . Ja ilman sulkeja, tämä on vain tyhjä merkki, "lintu" ja "paisti".

  2. "Jännittävä" osa-alue. Tämä tarkoittaa sitä, että jos substriini vastaa mallia, kaikki tulokset palautetaan tuloksena. Selvyyden vuoksi annamme esimerkin. Seuraava säännöllinen lauseke annetaan: voittaja saa ((kulta | kullattu) (medal | pikari)) - ja merkkijonon: "voittaja saa kultamitalin" . Sen lisäksi, että alkuperäisen lauseen, seurauksena haun annetaan: "kultamitali" , "mitali", "kulta" .

Toistotoiminnan harjoittajat (neliörit)

Säännöllisiä lausekkeita luotaessa on hyvin usein tarpeen analysoida numeroiden ja symbolien toisto. Tämä ei ole ongelma, jos ei ole paljon toistoja. Mutta entä jos emme tiedä niiden tarkkaa lukumäärää? Tässä tapauksessa sinun on käytettävä erityisiä metakaraktereja.

Toistojen kuvauksessa käytetään nelikokoisia - metakaraktereja numeroiden määrittämiseen. Quadrices ovat kahta tyyppiä:

  • Yleinen, suluissa suljetut;
  • vähenee.

Kokonaisvakioimiseen vaikuttaa elementin sallittujen toistojen vähimmäis- ja enimmäismäärät kahden numeron muodossa kiemurtelevissa sulkeissa, esimerkiksi: x {2,5}. Jos toistojen enimmäismäärä on tuntematon, toista argumenttia ei ole määritetty: x {2,}.

Pienemmät kvantifioijat edustavat symboleja yleisimpiä toistoja varten syntaksin tarpeettoman ylikuormituksen välttämiseksi. Käytetään yleensä kolmea lyhennettä:

1. * - nolla ja enemmän toistoja, mikä vastaa {0,}.

2. + yksi tai useampi toisto, ts. {1,}.

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

Esimerkkejä säännöllisistä lausekkeista

Niille, jotka opiskelevat säännöllisiä lausekkeita, esimerkkejä ovat paras oppikirja. Annamme muutamia, jotka osoittavat heidän runsaasti mahdollisuuksiaan vähällä vaivalla. Kaikki ohjelmakoodit ovat täysin yhteensopivia PHP 4.x ja uudempien versioiden kanssa. Jotta ymmärtäisit syntaksin täysin ja käytän kaikkia kieliominaisuuksia, suosittelemme J. Friedlin kirjasta "Säännöllisiä lausekkeita", jossa syntaksi on täysin ymmärretty ja esimerkkejä säännöllisistä lausekkeista paitsi PHP: ssä, myös Python-, Perl-, MySQL-, Java-, Ruby- ja C # -ohjelmissa.

Sähköpostiosoitteen oikeellisuuden tarkistaminen

Tehtävä. Sivulla on internet-sivu, jossa kävijältä pyydetään sähköpostiosoitetta. Säännöllisen lausekkeen on tarkistettava vastaanotetun osoitteen oikeellisuus ennen viestien lähettämistä. Tarkastus ei takaa, että määritetty postilaatikko todella on olemassa ja hyväksyy kirjeet. Mutta on mahdollista poistaa rikkomatta tarkoituksellisesti vääriä osoitteita.

Ratkaisu. Kuten missä tahansa ohjelmointikielessä, PHP: n sähköpostiosoitteiden vahvistamisen säännölliset lausekkeet voidaan toteuttaa PHP: llä eri tavoin, eikä tässä artikkelissa olevat esimerkit ole lopullinen ja ainoa vaihtoehto. Siksi kussakin tapauksessa luetellaan vaatimukset, jotka on otettava huomioon ohjelmoinnissa, ja erityinen toteutus riippuu kokonaan kehittäjistä.

Joten sähköpostiosoitteiden voimassaolon tarkistamisen tulisi tarkistaa seuraavat ehdot:

  1. @ -merkin läsnäolo lähdemerkinnässä ja tilojen puuttuminen.
  2. Osoitteen verkkotunnuksen osa, @ -merkin ulkopuolella, sisältää vain kelvollisia merkkejä verkkotunnuksista. Sama koskee käyttäjänimeä.
  3. Käyttäjätunnistetta tarkistettaessa on määritettävä, ovatko erityismerkkejä, esimerkiksi apostrofia tai pystysuoraa palkkia. Tällaiset symbolit ovat mahdollisesti vaarallisia, ja ne voivat sisältyä hyökkäyksiin, kuten SQL-injektioihin. Vältä näitä osoitteita.
  4. Käyttäjätunnukset sallivat vain yhden pisteen, joka ei voi olla merkkijonon ensimmäinen tai viimeinen merkki.
  5. Verkkotunnuksen nimen on sisällettävä vähintään kaksi ja enintään kuusi merkkiä.

Esimerkki, jossa otetaan huomioon kaikki nämä ehdot, voidaan nähdä alla olevassa kuvassa.

URL-osoitteiden vahvistaminen

Tehtävä. Tarkista, onko määritetty tekstin merkkijono kelvollinen URL-osoite. Jälleen kerran säännöllisiä URL-lausekkeita voidaan toteuttaa eri tavoin.

Ratkaisu. Lopullinen versio on seuraava:

/^(https?:\/\))((~~~~~~~~~~~~~~~~) * \ /? $ /

Nyt analysoidaan sen komponentit tarkemmin kuvion avulla.

Kohta 1 Ennen URL-osoitetta ei voi olla mitään merkkiä
Kohta 2 Tarkistamme pakollisen etuliitteen "http"
Kohta 3 Merkkejä ei saa olla
Kohta 4 Jos on olemassa "s", URL-osoite osoittaa suojatun yhteyden "https"
Kohta 5 Pakollinen "//"
Kohta 6 Ei merkkejä
Kohta 7-9 Ensimmäisen tason verkkotunnuksen oikeellisuuden tarkistaminen ja pisteen saatavuus
p.10-13 Toisen tason verkkotunnuksen ja pisteen kirjoittamisen oikeellisuuden hallinta
Kohta 14-17

URL-tiedostorakenne on joukko numeroita, kirjaimia, alaviivoja, väliviivoja, pisteitä ja viivoja lopussa

Luottokortin numeroiden tarkistaminen

Tehtävä. On tarpeen tarkistaa yleisimmän maksujärjestelmän syötetyn muovikortin numeron oikeellisuus. Vaihtoehtoa pidetään vain Visa ja MasterCard.

Ratkaisu. Ilmaisun luomisen yhteydessä on otettava huomioon mahdollisten tilojen esiintyminen syötetyssä numerossa. Kartan numerot on jaettu ryhmiin helpottamaan lukemista ja saneluja. Siksi on täysin luonnollista, että henkilö voi yrittää syöttää numeron tällä tavalla (ts. Käyttämällä välilyöntejä).

On vaikeampaa kirjoittaa yleisnäkemystä, jossa otetaan huomioon mahdolliset tilat ja yhdysviivat, kuin yksinkertaisesti pudota kaikki symbolit paitsi numerot. Siksi lausekkeessa suositellaan käytettävä / D metakarakteria, joka poistaa kaikki merkit paitsi numeroita.

Nyt voit siirtyä suoraan numeron vahvistamiseen. Kaikki luottokorttiyhtiöt käyttävät ainutkertaista numeromuotoa. Esimerkissä tätä käytetään ja asiakkaan ei tarvitse antaa yrityksen nimeä - se määräytyy numeron mukaan. Visa-kortit alkavat aina 4: llä ja niiden pituus on 13 tai 16 numeroa. MasterCard alkaa alueelta 51-55, jonka pituus on 16. Tuloksena on seuraava lauseke:

Ennen tilauksen käsittelyä voit suorittaa ylimääräisen tarkistuksen numeron viimeisestä numerosta, joka lasketaan Moonin algoritmilla.

Puhelinnumeroiden tarkistaminen

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

Ratkaisu. Kiinteiden ja matkapuhelinnumeroiden numeroiden määrä vaihtelee suuresti maasta riippuen, joten on yleistä tarkistaa säännölliset lausekkeet, puhelinnumero ei voi olla oikea. Kansainvälisillä numeroilla on kuitenkin tiukka muoto ja ne soveltuvat hyvin mallin tarkistamiseen. Lisäksi yhä useammat kansalliset puhelinoperaattorit yrittävät noudattaa yhtä standardia. Numerorakenne on seuraava:

+ CCC.NNNNNNNNNNxEEEE, jossa:

- C on maakoodi, joka koostuu 1-3 numeroa.

- N - enintään 14 numeroa.

- E on valinnainen jatke.

Plus on pakollinen elementti, ja merkki x esiintyy vain, jos laajennus on välttämätöntä.

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

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

Numerot alueelta

Tehtävä. On välttämätöntä varmistaa, että kokonaisluku vastaa tietyn alueen. Lisäksi on välttämätöntä, että säännöllisiä lausekkeita löytyy vain arvojen alueelta.

Ratkaisu. Annamme useita ilmaisuja useisiin yleisimpiin tapauksiin:

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

Etsi IP-osoite

Tehtävä. Sinun on määritettävä, onko määritetty merkkijono IPv4-muotoinen kelvollinen IP-osoite, joka vaihtelee välillä 000.000.000.000-255.255.255.255.

Ratkaisu. Kuten kaikilla PHP-tehtävillä, säännöllisellä lausekkeella on useita vaihtoehtoja. Esimerkiksi:

Online lausekkeiden testaus

Säännöllisten lausekkeiden tarkistaminen ohjelmiston aloitusohjelman oikeellisuuden kannalta voi olla vaikeaa syntaksin monimutkaisuuden vuoksi, joka eroaa "normaaleista" ohjelmointikieleistä. Tämän ongelman ratkaisemiseksi on monia online-ilmaisimetestejä, joiden avulla voit helposti todentaa luotavan mallin oikeellisuuden todellisessa tekstissä. Ohjelmoija syöttää lausekkeen ja tiedot tarkistukseen ja näkee välittömästi käsittelyn tuloksen. Yleensä on myös viitekehys, jossa yksityiskohtaisia kuvauksia ovat säännölliset lausekkeet, esimerkit ja toteutuserot yleisimpiä ohjelmointikieliä varten.

Mutta täysin luottamusta online-palvelujen tuloksiin ei suositella kaikille kehittäjille, jotka käyttävät PHP: tä. Säännöllinen ilmaisu, kirjallinen ja todennettu henkilö, nostaa pätevyyden ja takaa virheiden puuttumisen.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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