Mga computerProgramming

PHP (regex) - ano ito? Mga halimbawa at pag-check regular na expression

Kapag nagtatrabaho sa mga teksto sa anumang modernong programming wika, mga developer patuloy na matugunan ang mga layunin ng pag-input ng pagpapatunay para sa pagsunod sa ang nais na pattern, hanapin at palitan ang mga pagsubok fragment at iba pang mga uri ng pagpoproseso ng mga operasyon ng mga impormasyon na karakter. Bumuo ng iyong sariling mga algorithm ng pagpapatunay ay humantong sa pagkawala ng oras, ang code compatibility at pagiging kumplikado sa kanyang pag-unlad at paggawa ng makabago.

Ang sunud-unlad ng Internet at WEB-disenyo wika kinakailangan ang paglikha ng maraming nalalaman at compact na paraan ng pagpoproseso ng teksto na may isang minimum na halaga na kinakailangan para sa ang code na ito. Ito ay walang kataliwasan at ay popular sa mga beginners at mga propesyonal na mga developer ng PHP wika. Ang regular na expression wika ng mga template ng teksto upang pasimplehin ang gawain ng paghawak ng teksto at bawasan code para sa sampu-sampung at daan-daang mga linya. Maraming mga problema ay hindi malulutas sa lahat nang wala ito.

Regular Expression sa PHP

PHP wika ay may tatlong mga mekanismo para sa nagtatrabaho sa mga regular na expression - «ereg», «mb_ereg» at «preg». Ang pinaka-karaniwang ay ang interface «preg», na ang mga pag-andar ay nagbibigay ng access sa library ng PCRE regular na expression na suporta, na orihinal na binuo para sa Perl wika, na kung saan ay kasama sa PHP package. Preg-naghahanap ng pag-andar sa isang ibinigay na string ng teksto na tumutugma sa, ayon sa isang tiyak na pattern sa wika ng mga karaniwang expression.

syntax Basics

Bilang bahagi ng isang maikling artikulong ito ay imposible upang ilarawan sa detalye ang buong regular na expression syntax, dahil dito ay may isang espesyal na panitikan. Ipinapakita namin lamang ang pangunahing mga elemento upang ipakita ang mga pagkakataon para sa mga developer at maunawaan ang mga halimbawa code.

Sa PHP regular na expression ay pormal na tinukoy mahirap, at samakatuwid ay gawing simple ang paglalarawan. Ang isang regular na expression ay isang string ng teksto. Binubuo ito ng isang nakalaang separator template at ang mga modifier na nagpapahiwatig ng paraan upang mahawakan ang mga ito. Mga posibleng maisama sa iba't-ibang mga alternatibo at repetitions ng pattern.

Halimbawa, sa expression / \ d {3} - \ d {2} - \ d {2} / m divider ay "/", kasunod ang template, at ang simbolo «m» ay ang modifier.

Ang lahat ng mga kapangyarihan ng mga regular na expression ay naka-encode gamit ang mga meta-character. Ang pangunahing wika metacharacter ay ang backslash - "\". Ito ang mga pagbabago sa uri ng sumusunod na mga character sa ang kabaligtaran (ie. E. Nagbalik-loob sa isang ordinaryong karakter wildcard at vice versa). Ang isa pang mahalagang metacharacter ay isang tuwid na linya «|», tumutukoy sa alternatibong template. Higit pang mga halimbawa ng meta-character:

^ Simulan bagay o isang string
( simulan subpattern
) end subpattern
{ Start quantifier
} end quantifier
\ d decimal na digit mula 0 hanggang 9
\ D anumang mga character na ay hindi isang numero
\ s Walang laman simbolo, space, tab,
\ w simbolo diksyunaryo

PHP, sa pagpoproseso ng mga regular na expression, space itinuturing bilang isang hiwalay na wastong character, kaya ang pagpapahayag ng XYZ at ABC SAAN ay magkaiba.

subpatterns

Sa PHP regular na subpatterns ng panaklong, at sila ay minsan ay tinatawag na "subexpressions". Isagawa ang mga sumusunod na function:

  1. Paglalaan alternatibo. Halimbawa, ang init pattern (isang bagay | Bird |) kasabay ng mga salitang "init", "Firebird" at "hot". At walang mga bracket ay tanging itong maging isang walang laman na string, "ibon" at "hot".

  2. "Kamangha-manghang" subpattern. Ito ay nangangahulugan na kung ang pattern naitugmang substring, pagkatapos ay bumalik ang lahat ng mga tugma. Para sa kalinawan, bigyan kami ng isang halimbawa. Given ang mga sumusunod na karaniwang expression: ang nagwagi na natatanggap ((gold | gold plated) (medalya | cup)) - at ang string ng mga tugma, "ang nagwagi ay makakakuha ng isang gintong medalya." Bilang karagdagan sa mga paunang parirala, ang mga resulta ng paghahanap Ibibigay: "Gold Medal", "medals", "ginto".

Operator repetitions (kvadrifikatory)

Sa kino-compile ang mga regular na expression ay madalas na kinakailangan upang pag-aralan ang pag-uulit ng mga numero at simbolo. Ito ay hindi isang problema, kung hindi isang pulutong ng mga repetitions. Ngunit ano ang gagawin kapag hindi natin alam ang kanilang eksaktong number? Sa kasong ito ito ay kinakailangan upang gumamit ng mga espesyal metacharacters.

Para sa isang paglalarawan ng mga repetitions ginagamit kvadrifikatory - metacharacters upang tukuyin ang numero. Kvadrifikatory ay ng dalawang uri:

  • karaniwan sa mga bracket;
  • nabawasan.

Pangkalahatang quantifier hinawakan ng minimum at maximum na bilang ng mga pinapayagang mga repetitions elemento sa anyo ng dalawang numero sa braces, tulad ng x {2,5}. Kung ang maximum na bilang ng mga repetitions ay hindi kilala, ang pangalawang argumento ay hindi tinukoy: x {2}.

Dinaglat quantifiers ay simbolo para sa mga pinaka-karaniwang ng mga repetitions upang maiwasan ang mga hindi kailangang labis na pasanin syntax. Kadalasan mayroong tatlong cuts:

1. * - zero o higit pang mga repetitions, na kung saan ay katumbas ng {0,}.

2. + - isa o higit pang mga repetitions, ie, {1} ...

3.? - zero o lamang ng isang umuulit - {0,1}.

Mga halimbawa regex

Para sa mga taong malaman ang regular na expression, halimbawa - ang pinakamahusay na textbook. bigyan kami ng ilang na ipakita ang kanilang mga pagkakataon na may minimum na pagsisikap. Lahat code ay ganap na katugma sa mga bersyon ng PHP 4.x at sa itaas. Upang lubos na maunawaan ang syntax at paggamit ng lahat ng mga katangian ng wika inirerekumenda namin ang libro sa pamamagitan ng J .. Friedl, "regular na expression", na ganap na isinasaalang-alang syntax, at doon ay mga halimbawa ng mga regular na expression hindi lamang PHP, ngunit din para sa isang Python, Perl, MySQL, Java, Ruby, at C #.

Pagpapatunay E-mail address

Task. May ay isang Internet pahina kung saan ang bisita ay hiniling na address ng email. Regular na expression ay dapat suriin ang kawastuhan ng mga address bago pagpapadala ng mga mensahe. Check ay hindi ginagarantiya na ang mga tinukoy na mailbox talagang umiiral at tumatanggap ng mensahe. Ngunit alisin ang malinaw naman mali address ng makakaya nito.

Desisyon. Tulad ng sa anumang programming wika, sa PHP regex email-address verification ay maaring ipatupad sa iba't ibang paraan, at ang mga halimbawa sa artikulong ito ay hindi ang pangwakas na at lamang na pagpipilian. Samakatuwid, sa bawat kaso, dapat naming magbigay ng isang listahan ng mga kinakailangan na kailangan upang madala sa account kapag programming at mga tiyak na pagpapatupad ay depende buo sa nag-develop.

Kaya, ang mga expression na sumusubok ng valid email, dapat suriin ang mga sumusunod na kondisyon:

  1. Ang pagkakaroon sa panimulang line simbolong @ at walang mga gaps.
  2. Ang domain na bahagi ng address ng simbolong @ naglalaman lamang ng wastong character para sa pangalan ng domain. Ang parehong naaangkop sa pangalan ng gumagamit.
  3. Kapag check ang username ay kinakailangan upang matukoy ang pagkakaroon ng mga espesyal na character tulad ng isang kudlit o patayong linya. Ang ganitong mga simbolo ay potensyal na mapanganib at maaaring nakapaloob sa naturang uri ng mga pag-atake na SQL-iniksyon. Iwasan address.
  4. mga username payagan lamang ng isang punto, na kung saan ay maaaring hindi ang una o huling character sa string.
  5. Ang domain name ay dapat maglaman ng hindi bababa sa dalawa at hindi hihigit sa anim na mga character.

Halimbawa, nang isinasaalang-alang ang lahat ng mga kundisyon na ito ay makikita sa ang mga sumusunod na figure.

Pagpapatunay ng URL

Task. Suriin kung ang mga tinukoy na string ng teksto ay isang wastong URL address. Muli, tandaan natin na ang mga regular na expression URL-checking ay maaring ipatupad sa iba't-ibang mga paraan.

Desisyon. Ang aming huling bersyon ay ang mga sumusunod:

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

Ngayon pag-aralan ng mga bahagi nito nang mas detalyado gamit ang pagguhit.

angkin 1 Bago ang URL ay dapat magkaroon ng anumang mga character
Claim 2 Lagyan ng check ang presensya ng ipinag-uutos na prefix «http»
item 3 Walang nakaharang na mga simbolo
Claim 4 Kung may «s», ang URL na puntos sa isang secure na koneksyon «https»
Claim 5 Mga kinakailangang bahagi ng "//"
Claim 6 walang mga character
p. 7-9 Bine-verify ang unang antas ng domain at ang pagkakaroon ng punto
p.10-13 Bine-verify ang domain ng pagsulat sa ikalawang antas at sa punto
p.14-17

File istruktura ng URL - isang hanay ng mga numero, mga titik, underscore, gitling, tuldok, at isang slash sa dulo

Lagyan ng check ang mga numero ng credit card

Task. Kailangan mo upang ipatupad ang pagpapatunay ng ipinasok na numero ng credit card sa mga pinaka-karaniwang mga sistema ng pagbabayad. Ang isang variant lamang para sa mga cards Visa at MasterCard.

Desisyon. Kapag gumagawa ng mga expression na kailangan mong isaalang-alang ang mga posibleng pagkakaroon ng mga gaps sa input room. Ang mga digit sa mapa ay nahahati sa mga grupo para sa mas madaling pagbabasa at pagdidikta. Samakatuwid, ito ay natural na ang isang tao ay maaaring subukan na ipasok ang isang numero sa paraang ito (ie. E. Ang paggamit ng mga puwang).

Sumulat ng universal expression na tumatagal sa account ang mga posibleng mga puwang o gitling, ay mas kumplikado kaysa sa simpleng itapon ang lahat ng mga character maliban digit. Samakatuwid, inirerekumenda namin ang paggamit ng mga wildcard expression / D, na nag-aalis sa lahat ng karakter maliban digit.

Ngayon ay maaari kang pumunta nang direkta sa bilang tseke. Lahat ng mga kompanya, credit card issuer gumamit ng isang natatanging numero ng format. Sa halimbawa ng ito ay ginamit, at ang kliyente ay hindi kailangan upang ipasok ang pangalan ng kumpanya - ito ay tinutukoy ng mga numero. Visa card laging nagsisimula sa mga numerong 4 at magkaroon ng isang haba ng 13 o 16 mga digit. MasterCard ay nagsisimula sa hanay ng mga 51-55 na may isang mahabang number 16. Bilang isang resulta, makuha namin ang mga sumusunod na expression:

Bago ang pagproseso ng order ay maaaring karagdagang nasubukan huling digit ng numero, na kung saan ay kinakalkula sa Luhn algorithm.

Bine-verify ang numero ng telepono

Task. Sinusuri ang kawastuhan ng ipinasok na numero ng telepono.

Desisyon. Ang bilang ng mga digit sa nakapirming at mobile na numero ng telepono ay nag-iiba malaki depende sa bansa, kaya naa-check gamit ang mga regular na expression, numero ng telepono nang tama imposible. Ngunit international na numero magkaroon ng isang mahigpit na format at perpekto para sa pagtingin sa mga pattern. Dagdag pang kaya na mas at mas maraming mga pambansang mga operator ng telepono ay sinusubukan upang matugunan ang parehong pamantayan. Room istraktura ay ang mga sumusunod:

+ CCC.NNNNNNNNNNxEEEE, kung saan:

- C - ay ang country code na binubuo ng 1-3 digit.

- N - number hanggang sa 14 digit.

- E - opsyonal extension.

Plus ay isang kailangang-kailangan na sangkap, at ang pag-sign X ay naroroon lamang kapag kinakailangan extension.

Bilang isang resulta kami ay may mga sumusunod na expression:

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

Ang mga numero sa hanay

Task. Ito ay kinakailangan upang matiyak nagkataon integer ng isang tiyak na saklaw. Bilang karagdagan, ito ay kinakailangan upang mahanap ang isang regular na expression lamang ang mga numero mula sa hanay.

Desisyon. Narito ang ilang mga expression sa ilan sa mga pinaka-karaniwang mga kaso:

Alamin hour mula 1 sa 24 ^ (1 [0-2] | [1-9]) $
Araw sa buwan 1-31 ^ (3 [01] | [12] [0-9] | [1-9]) $
Segundo o minuto 0-59 ^ [1-5] [0-9] $
Ang isang bilang mula 1 hanggang 100 * (100 | [1-9] [0-9]) $
Araw ng taon 1-366 ^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} | [1-9] [0-9]) $

Search IP-address

Task. Ito ay kinakailangan upang matukoy kung ang isang naibigay na string ay isang wastong IP-address sa IPv4 format sa hanay mula 000.000.000.000-255.255.255.255.

Desisyon. Tulad ng sa anumang mga problema sa wika ng PHP, ang mga regular na expression ay maraming varintov. Halimbawa, ito:

Online checking ng mga expression

Suriin regex tama para sa mga nagsisimula ay maaaring maging mahirap dahil sa ang pagiging kumplikado ng ang syntax, na kung saan ay naiiba mula sa "regular" programming wika. Upang malutas ang problemang ito, mayroong maraming mga online testers expression na ginagawang madali upang suriin ang kawastuhan ng mga template na nilikha mo sa tunay na teksto. programmer Ang pumapasok sa pagpapahayag at pag-verify ng data at agad na makita ang mga resulta ng pagproseso. Karaniwan diyan ay kasalukuyan ng isang reference na seksyon, kung aling mga detalye ang mga regular na expression, halimbawa at pagpapatupad pagkakaiba para sa pinaka-extended wika.

Ngunit upang lubos na tiwala serbisyong online resulta ay hindi inirerekomenda para sa lahat ng mga developer na gumagamit ng PHP. Ang isang regular na expression ay nakasulat at na-verify sa tao, itinaas kwalipikasyon at ginagarantiya ang kawalan ng error.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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