Komputiloj, Programado
PHP (regula esprimo) - kio estas? Ekzemploj kaj kontrolado de regulaj esprimoj
Kiam laborante kun tekstoj en iu moderna programlingvo, la programistoj konstante renkontiĝas kun la taskoj kontrolanta la eniritajn datumojn por kongrui la bezonatan ŝablonon, serĉante kaj anstataŭigante testajn fragmentojn kaj aliajn tipajn operaciojn por prilabori simbolajn informojn. Disvolviĝo de propraj konfirmo-algoritmoj kondukas al perdo de tempo, nekongruo de la programo-kodo kaj komplekseco en ĝia evoluo kaj modernigo.
Rapida evoluo de Interreto kaj la lingvoj de WEB-evoluo postulis kreadon de universalaj kaj kompaktaj tekstaj instaladoj kun la minimuma kvanto de kodo bezonata por tio. La PHP-lingvo ne estas escepto kaj estas populara inter komencantoj kaj profesiaj programistoj. Regula esprimo kiel lingvo de tekstaj ŝablonoj permesas simpligi la taskon de tekstila proceso kaj redukti la programkodon per dekoj kaj centoj da linioj. Multaj taskoj ne povas esti solvitaj sen ĝi.
Regulaj esprimoj en PHP
La PHP-lingvo enhavas tri mekanismojn por labori kun regulaj esprimoj - "ereg", "mb_ereg" kaj "preg". La plej komuna estas la interfaco "preg", kies funkcioj havigas aliron al la PCRE-regula regula subteno-biblioteko, origine evoluigita por la lingvo Perl, kiu estas inkluzivita en la pakaĵo de PHP. Preg-funkcioj serĉas en la specifita teksto-ĉeno de matĉo, laŭ certa ŝablono en la lingvo de regulaj esprimoj.
Bazaj de sintakso
En la kadro de mallonga artikolo estas neeble priskribi detale la tutan sintakson de regulaj esprimoj, por ĉi tiu celo ekzistas speciala literaturo. Jen nur la bazaj elementoj por montri ampleksan gamon de eblecoj por la programisto kaj kompreno de kodaj ekzemploj.
En PHP, regula esprimo estas formale difinita tre malfacila, kaj tial ni simpligas la priskribon. Regula esprimo estas teksto-kordo. Ĝi konsistas el limigita ŝablono kaj modifilo, indikante kiel pritrakti ĝin. Eblas inkluzivi diversajn alternativojn kaj ripetojn en ŝablonoj.
Ekzemple, en esprimo / \ d {3} - \ d {2} - \ d {2} / m dividanton estas "/", sekvita de la ŝablono, kaj la simbolo «m» estas la modifilo.
La tuta potenco de regulaj esprimoj estas kodita per metacoj. La ĉefa metakaturo de la lingvo estas la malaltiĝo - "\". Ĝi ŝanĝas la tipon de la karaktero sekvanta ĝin al la kontraŭa (tio estas, la ordinara karaktero iĝas metacharacter kaj viceversa). Alia grava metaculo estas la rekta linio "|", kiu specifas alternativajn variantojn de la ŝablono. Pli ekzemploj de metacoj:
| ^ | Komenco de objekto aŭ ĉeno |
| ( | Komenco de la subpatterno |
| ) | Fino de la subpatterno |
| { | Origino de la kvanto |
| } | Fino de kvanto |
| \ D | Dekuma nombro de 0 ĝis 9 |
| \ D | Ajna karaktero, kiu ne estas cifero |
| \ S | Blanka karaktero, spaco, langeto |
| \ W | Vortaro karaktero |
PHP, pretiganta regulajn esprimojn, konsideras spacon kiel aparta signifa simbolo, do la esprimoj ABCDEF kaj ABC DIE estas malsamaj.
Subpatternoj
En PHP, regulaj subpatternoj estas asignitaj en paréntesis kaj foje estas nomataj "subexprimoj". Faru la jenajn funkciojn:
Atribuo alternativoj. Ekzemple, la varmego ŝablono (io | Birdo |) koincidas kun la vortoj "varmego", "Firebird" kaj "varma". Kaj sen krampoj, ĉi tio nur estos malplena ĉeno, "birdo" kaj "rostita".
"Ekscitanta" subpatterno. Ĉi tio signifas, ke se la substringo kongruas en la ŝablono, tiam ĉiuj matĉoj revenas kiel rezulto. Por klareco, ni donas ekzemplon. Pro la sekvan regulan esprimon: la gajnanto ricevas ((oro | oro tegis) (medalon | taso)) - kaj la kordo por alumetoj, "la venkinto ricevas oran medalon." Krom la komenca frazo, la serĉrezultoj estos elsendita: "Ora medalo", "medaloj", "oro".
Operacioj de ripeto (kvadratoj)
Al la krei regulajn esprimojn, ofte oni devas analizi la ripetadon de nombroj kaj simboloj. Ĉi tio ne estas problemo, se ne multaj ripetoj. Sed kio se ni ne konas ilian ĝustan numeron? En ĉi tiu kazo, vi bezonas uzi specialajn metaktistojn.
Por la priskribo de ripetoj, kvadratoj estas uzataj - metacoj por specifi la numeron. Kvadrizoj estas el du specoj:
- Ĝenerala, kadrita inter krampoj;
- Malfermita.
La totala kvanto estas tuŝita de la minimuma kaj maksimuma nombro de permesitaj ripetoj de la elemento en la formo de du nombroj en buklaj krampoj, ekzemple: x {2,5}. Se la maksimuma nombro da ripetoj estas nekonata, la dua argumento ne estas precizigita: x {2,}.
Reduktitaj kvantoroj reprezentas simbolojn por la plej oftaj ripetoj por eviti nenecesan superŝarĝon de la sintakso. Tri sigloj kutime uzas:
1. * - nulo kaj pli da ripetoj, kiuj estas ekvivalentaj al {0,}.
2. + unu aŭ pli da ripetoj, i.e. {1,}.
3.? - nulo aŭ nur unu ripeto - {0,1}.
Ekzemploj de regulaj esprimoj
Por tiuj, kiuj studas regulajn esprimojn, ekzemploj estas la plej bona lernolibro. Ni donas kelkajn, kiuj montras siajn ampleksajn ŝancojn kun minimuma penado. Ĉiuj programaj kodoj estas plene kongruaj kun PHP 4.x kaj pli altaj versioj. Por plene kompreni la sintakson kaj uzi ĉiujn lingvajn karakterizaĵojn, ni rekomendas la libron "Regulaj Esprimoj" de J. Friedl, kie la sintakso plene komprenas kaj ekzistas ekzemploj de regulaj esprimoj ne nur en PHP, sed ankaŭ en Python, Perl, MySQL, Java, Ruby kaj C #.
Kontroli la korektecon de la retpoŝtadreso
La tasko. Ekzistas interreta paĝo, kie retpoŝta adreso petas de la vizitanto. La regula esprimo devas kontroli la korektecon de la ricevita adreso antaŭ sendi mesaĝojn. La ĉeko ne garantias, ke la specifita poŝtelefono vere ekzistas kaj akceptas leterojn. Sed eblas ebligi intence malĝustajn adresojn.
La solvo. Kiel en iu ajn lingva programado, regulaj esprimoj de retpoŝta konfirmo en PHP povas esti implementitaj en PHP laŭ diversaj manieroj, kaj la ekzemploj en ĉi tiu artikolo ne estas la fina kaj sola elekto. Sekve, en ĉiu kazo ni listigos la postulojn, kiujn oni devas konsideri en programado, kaj la specifa efektivigo dependas tute de la programisto.
Do, la esprimo kontrolanta la validecon de retpoŝto devus kontroli la jenajn kondiĉojn:
- La ĉeesto de la @ simbolo en la fonta ĉeno kaj la foresto de spacoj.
- La domajna parto de la adreso, ekster la @ simbolo, enhavas nur validajn signojn por domajnaj nomoj. Lin sama aplikas al la nomo de uzanto.
- Kiam vi konfirmas la uzantnomo, vi devas determini ĉu specialaj karakteroj ĉeestas, kiel apostrofo aŭ vertikala stango. Tiaj simboloj estas ege danĝeraj kaj povas esti enhavitaj en atakoj kiel SQL-injektoj. Eviti ĉi tiujn adresojn.
- Uzaj nomoj permesas nur unu punkton, kiu ne povas esti la unua aŭ lasta karaktero en la kordo.
- La domajna nomo devas enhavi almenaŭ du kaj ne pli ol ses karakterojn.
Ekzemplo, kiu konsideras ĉiujn ĉi tiujn kondiĉojn, povas esti vidita en la figuro pli sube.
Validiganta URLojn
La tasko. Kontrolu, ĉu la specifita teksto kordo estas valida adreson URL. Denove, regulaj URL-esprimoj povas esti aplikitaj laŭ diversaj manieroj.
La solvo. Nia fina versio estas kiel sekvas:
/^(https?:\/\/)?([\da-z\.-]+)\.([az\.]{2,6})([\/\w \ .-] *) * \ /? $ /
Nun ni analizu ĝiajn komponantojn pli detale uzante la figuron.
| Item 1 | Antaŭ ol la URL ne povas esti ajnaj signoj |
| Item 2 | Ni kontrolas la devigan prefikson "http" |
| Item 3 | Nepre devas esti signoj |
| Item 4 | Se ekzistas "s", tiam la URL montras sekuran konekton "https" |
| Item 5 | Postulita "//" |
| Item 6 | Neniuj signoj |
| Artikolo 7-9 | Kontrolante la unua nivelo domajno kaj la ĉeesto de punkto |
| 10-13 | Kontroli la korektecon de skribado de dua nivelo de domajno kaj punkto |
| Item 14-17 | La strukturo de arkivoj de URL estas aro de nombroj, literoj, substrekoj, makzeloj, punktoj kaj batoj ĉe la fino |
Kontroli kreditkartojn
La tasko. Oni Devas kontroli la korektecon de la enmetita plata karta nombro de la plej komunaj pagaj sistemoj. Varianto nur por kartoj Vizas kaj MasterCard.
La solvo. Kiam kreinte esprimon, oni devas konsideri la ebla ĉeesto de spacoj en la enirita nombro. La nombroj sur la mapo estas dividitaj en grupoj por facila legado kaj diktado. Sekve estas tre natura, ke persono povas provi eniri kelkajn en ĉi tiu maniero (tio estas, uzante spacoj).
Estas pli malfacile skribi universalan esprimon, kiu konsideras eblajn spacojn kaj makzelojn ol simple faligi ĉiujn simbolojn krom ciferoj. Sekve, en la esprimo, oni rekomendas uzi la / D metacharacter, kiu forigas ĉiujn karakterojn krom ciferoj.
Nun vi povas iri rekte al la nombro-konfirmo. Ĉiuj kreditkartaj kompanioj uzas unikan numeron. En la ekzemplo, ĉi tio estas uzata, kaj la kliento ne bezonas eniri la kompanio nomo - ĝi estas difinita per la nombro. Vizaj kartoj ĉiam komenciĝas kun 4 kaj havas longitudon de 13 aŭ 16 ciferoj. MasterCard komenciĝas en la gamo de 51-55 kun la longeco de la nombro 16. Kiel rezulto, ni ricevas la jenan esprimon:
Antaŭ prilaborado de la ordo, vi povas plenumi kroman numeron de la nombro, kiu estas kalkulita per la algoritmo de la Luno.
Kontroli telefonajn nombrojn
La tasko. Kontroli la korektecon de la enira telefono.
La solvo. La nombro da ciferoj en la fiksaj kaj poŝtelefonoj varias multe laŭ la lando, do ĝi estas universala kontroli la regulojn, la telefona nombro ne povas esti ĝusta. Sed internaciaj nombroj havas striktan formaton kaj estas bonega por kontrolanta de ŝablono. Plie, pli kaj pli naciaj telefonaj telefonistoj provas plenumi kun unu normo. Nombro strukturo estas kiel sekvas:
+ CCC.NNNNNNNNNNxEEEE, kie:
- C estas lando-kodo konsistanta el 1-3 ciferoj.
- N - nombro ĝis 14 ciferoj.
- E estas laŭvola etendo.
Plus estas deviga elemento, kaj la signo de x estas ĉeestanta nur se ekspansio estas necesa.
Kiel rezulto, ni havas la jenan esprimon:
^ \ + [0-9] {1,3} \. [0-9] {4,14} (?: X. +)? $
Nombroj en la gamo
La tasko. Oni devas certigi, ke entjero kongruas certan gamon. Aldone necesas, ke regulaj esprimoj troviĝas nur de la rango de valoroj.
La solvo. Ni donas plurajn esprimojn por pluraj el la plej oftaj kazoj:
| Determini la horon de 1 ĝis 24 | ^ (1 [0-2] | [1-9]) $ |
| Tago ene de la monato 1-31 | ^ (3 [01] | [12] [0-9] | [1-9]) $ |
| Dua aŭ minuto 0-59 | ^ [1-5]? [0-9] $ |
| Nombro de 1 ĝis 100 | ^ (100 | [1-9]? [0-9]) $ |
| Tago de la Jaro 1-366 | ^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} | [1-9] [0-9]?) $ |
Serĉu IP-adreson
La tasko. Vi devas determini ĉu la specifita ĉeno estas valida IP-adreso en la formularo IPv4 en la gamo de 000.000.000.000-255.255.255.255.
La solvo. Kiel kun ajna PHP-tasko, la regula esprimo havas multajn eblojn. Ekzemple ĉi tio:
Enreta provo de esprimoj
Kontroli regulajn esprimojn por korekteco por komencaj programistoj povas esti malfacila pro la komplekseco de la sintakso, kiu diferencas de "normalaj" programlingvoj. Por solvi ĉi tiun problemon, ekzistas multaj enretaj esprimaj testiloj, kiuj ebligas al vi facile kontroli la korektecon de la kreita ŝablono en reela teksto. La programisto eniras la esprimon kaj datumojn por konfirmo kaj tuj vidas la rezulton de la prilaborado. Kutime ankaŭ estas referenca sekcio kie regulaj esprimoj, ekzemploj kaj efektivaj diferencoj por la plej komunaj programlingvoj estas priskribitaj detale.
Sed tute fidanta la rezultojn de interretaj servoj ne estas rekomendinda por ĉiuj programistoj kiuj uzas PHP. Regula esprimo, skribita kaj kontrolita en persono, levas la kvalifikon kaj garantias la mankon de eraroj.
Similar articles
Trending Now