КомпьютерПрограмчлалын

PHP (regex) - энэ нь юу вэ? Жишээ нь, тогтмол илэрхийлэл шалгах

ямар нэг орчин үеийн програмчлалын хэл дээр текст ажиллахдаа байнга хүссэн загварын дагуу оролтын магадлагаа зорилго уулзаж, хайх, туршилтын хэсэг дээр, зан мэдээлэл боловсруулах үйл ажиллагааны бусад төрлийн солих хөгжүүлэгчид. цаг хугацаа алдах, түүний хөгжил, шинэчлэл дэх код нь нийцтэй бөгөөд төвөгтэй хүргэдэг өөрийн баталгаажуулах алгоритмыг боловсруулах.

Интернэт болон вэб дизайн хэл хурдацтай хөгжлийн энэ код шаардлагатай хамгийн бага хэмжээний текст боловсруулах уян хатан, авсаархан хэрэгслийг бий болгох шаардлагатай. Энэ нь ч мөн адил бөгөөд эхлэн ба PHP хэлний мэргэжлийн боловсруулагчдын дунд түгээмэл байдаг. текст загвар болгон тогтмол илэрхийлэл хэлний текст боловсруулах ажлыг хялбарчилж, хэдэн арван болон шугам зуун кодыг бууруулах. Олон асуудал бүх Хэрэв ямар шийдэгдээгүй байж болно.

PHP-д тогтмол илэрхийлэл

«Эрэг», «mb_ereg» болон «preg» - PHP хэлний тогтмол илэрхийлэл хамтран ажиллах гурван механизм байдаг. Хамгийн түгээмэл интерфэйс нь «preg», түүний чиг үүрэг PCRE тогтмол илэрхийлэл дэмжлэг, Perl хэл, PHP багцад орсон байдаг нь анх боловсруулсан номын сан руу хандах боломж олгодог юм. тогтмол илэрхийлэл хэлээр тодорхой загварын дагуу, Preg-хайж байгаа нь тухайн текст тохирсон дахь функцуудыг.

синтакс үндэс

богино зүйлийн нэг хэсэг нь энэ нь нийт тогтмол илэрхийлэл синтакс, нарийвчлан тайлбарлах нь тусгай уран зохиол байдаг энэ нь боломжгүй юм. Бид Хөгжүүлэгч боломжийг харуулж, код жишээ ойлгохын тулд зөвхөн үндсэн элементүүдийг танилцуулж байна.

PHP-д тогтмол илэрхийлэл албан ёсоор маш хэцүү тодорхойлсон байна, тиймээс тайлбар хялбаршуулах. А тогтмол илэрхийлэл текст юм. Энэ нь тусгай зориулалтын тусгаарлагч загвар ба засах үүнийг зохицуулах арга замыг зааж бүрдэнэ. хэв маяг янз бүрийн хувилбаруудын болон давталтуудыг боломжтой оруулах.

Жишээ нь, үзэл бодлоо чөлөөтэй илэрхийлэх нь / \ г {3} - \ г {2} - \ г {2} / м тусгаарлах "/" загварыг, дараа нь юм, мөн бэлэг тэмдэг «м» засах болно.

тогтмол илэрхийлэл бүх цахилгаан мета-тэмдэгтүүдийг ашиглан кодлогдсон байна. "\" - үндсэн хэл metacharacter урагш налуу байдаг. Энэ нь эсрэг талын дээр тэмдэгтүүдийг дараах төрлийг өөрчилдөг (өөрөөр хэлбэл. E. жирийн тэмдэгт орлуулагддаг тэмдэгт болон эсрэгээр хөрвүүлж). «|», Өөр загварыг тодорхойлдог өөр нэг чухал metacharacter шулуун шугам байна. мета-тэмдэгтүүд нь илүү жишээ:

^ объект буюу мөр эхлэх
( subpattern эхлэх
) Төгсгөл subpattern
{ Start quantifier
} Төгсгөл quantifier
\ г 0-ээс 9 аравтын оронтой
\ D тоо биш юм ямар ч тэмдэгт
\ с хоосон бэлэг тэмдэг, орон зай, таб,
\ э тэмдэг толь бичиг

PHP, тогтмол хэллэг, тусад нь хүчин төгөлдөр шинж чанартай гэж үзэж орон зай, тийм болохоор XYZ болон ABC илэрхийлэл өөр өөр байдаг боловсруулах.

subpatterns

хаалтанд өөр PHP тогтмол subpatterns онд тэд заримдаа "subexpressions" гэж нэрлэдэг байна. дараахь чиг үүргийг гүйцэтгэнэ:

  1. Хуваарилалт хувилбарууд. Жишээ нь, дулаан хэв маяг (ямар нэг зүйл | Bird |) үг нь "халуун" -тэй давхцаж, "Firebird" болон "халуун". Тэгээд хаалтанд ч энэ нь зөвхөн хоосон мөр "шувуу" болон "халуун" байх болно.

  2. "Гайхамшигтай" subpattern. Энэ хэв маяг substring таарч бол, бүх тоглолтонд эргэн гэсэн үг юм. Тодруулбал, бид нэг жишээ. Харгалзан тогтмол илэрхийллийг дараах ялагч хүлээн авах ((алт | алт бүрсэн) (медаль | аяга)) - болон тоглолтуудад нь мөр, "ялагч алтан медаль авдаг." Эхний хэллэг гадна, хайлтын үр дүнг гаргаж болно: "Алтан медаль", "медаль", "алт".

Операторууд давталт (kvadrifikatory)

тогтмол илэрхийлэл хөрвүүлэх тоо, тэмдэглэгээний давтан шинжилгээ хийх шаардлагатай болдог. Энэ нь асуудал биш ч давталтуудыг нь маш их биш юм. Гэтэл бид тэдний тоог яг тодорхой мэдэхгүй байгаа үед юу хийх вэ? Энэ тохиолдолд энэ нь тусгай metacharacters ашиглах шаардлагатай байна.

тоог зааж өгөх metacharacters - kvadrifikatory ашиглаж давталтуудыг нь тайлбарыг. Kvadrifikatory хоёр төрлийн байдаг:

  • хаалтанд нийтлэг;
  • буурсан байна.

Ер нь quantifier ийм х {2,5} гэж хаалтанд хоёр тоо, хэлбэрээр зөвшөөрсөн давталт элементийн хамгийн бага болон хамгийн их тоо хүрэв. давталтуудыг хамгийн их тоо тодорхой бус бол, хоёр дахь аргумент заагаагүй бол: X {2}.

Товчилсон quantifiers шаардлагагүй даац синтакс зайлсхийхийн тулд давталтуудыг хамгийн түгээмэл нь тэмдэглэгээ байдаг. Ихэвчлэн гурван бууруулснаар байдаг:

1. * - тэг буюу түүнээс дээш давталт {0} тэнцэх юм.

2. + - нэг буюу хэд хэдэн давталт, өөрөөр хэлбэл, {1} ...

3.? - тэг эсвэл зөвхөн нэг нь давтан - {0,1}.

жишээ нь regex

хамгийн шилдэг сурах бичиг - тогтмол илэрхийлэл, жишээ сурч байгаа хүмүүсийн хувьд. Бид хүчин чармайлт нь наад зах нь тэдний боломжийг харуулах гэж хэдэн өгч байна. Бүх код нь PHP 4.x болон түүнээс дээш хувилбарууд нь бүрэн нийцэж байгаа. Бид J .. Friedl, "тогтмол илэрхийлэл", бүрэн синтакс хэлцлээр номыг санал болгож байна бүх хэлний онцлог синтакс болон ашиглалтыг бүрэн ойлгох биш, зөвхөн PHP, гэхдээ бас Python, Perl, MySQL, Java, Ruby, С # тогтмол илэрхийлэл жишээ байдаг юм.

Баталгаажуулалт И-мэйл хаяг

Даалгавар. аль зочин хаяг И-мэйл хүсэлт интернэт хуудас байдаг. Энгийн илэрхийлэл нь мессеж илгээхээс өмнө хаягийн үнэн зөв эсэхийг шалгах ёстой. Шалгах заасан шуудангийн хайрцаг нь үнэндээ байгаа болон мессеж хүлээн авсан гэсэн баталгаа өгөхгүй. Гэхдээ энэ нь болох нь илт буруу хаягуудыг гарч цэвэрлэхээр.

Шийдвэр. ямар ч програмчлалын хэл адил, PHP өөр өөр арга замаар regex и-мэйл хаяг шалгах хэрэгжүүлж болно, мөн энэ зүйлд жишээ эцсийн бөгөөд цорын ганц сонголт биш юм. Тиймээс тохиолдол бүрт бид програмчлалын болон тодорхой хэрэгжүүлэх хөгжүүлэгч дээр бүхэлдээ хамаарна үед харгалзан үзэх хэрэгтэй шаардлагыг жагсаалтыг гаргаж өгнө.

Тиймээс зөв имэйл тест илэрхийлэл, дараахь нөхцөлийг шалгах хэрэгтэй:

  1. эхлүүлэх оролцох @ тэмдэг мөрөнд, ямар ч дутагдалтай байна.
  2. @ Тэмдэг хаяг домэйн хэсэг, домэйн нэрийг зөвхөн хүчин төгөлдөр тэмдэгтүүдийг агуулдаг. Нэг хэрэглэгчийн нэр хэрэглэнэ.
  3. Хэрэглэгчийн нэрээ шалгах үед ийм орхиц буюу босоо шугам зэрэг тусгай тэмдэгт байгаа эсэхийг тодорхойлох нь чухал юм. Ийм тэмдэглэгээ аюултай байдаг бөгөөд SQL шахаж гэсэн халдлагын ийм төрлийн дотор агуулагдаж байгаа болно. хаяг зайлсхий.
  4. хэрэглэгчийн нэр нь зөвхөн нэг цэг, тэмдэгт мөрийн эхний болон сүүлийн тэмдэгт байж болох боломжийг олгодог.
  5. домэйн нэр наад зах нь хоёр биш, зургаагаас дээш тэмдэгт агуулсан байх ёстой.

Жишээ нь, харгалзан эдгээр бүх нөхцөл авч дараах зурагт харж болно.

нь URL-ын Баталгаажуулалт

Даалгавар. заасан текст нь зөв байгаа эсэхийг шалгана хаяг URL. Дахин нэг удаа бид тогтмол илэрхийлэл URL-шалгах янз бүрийн аргаар хэрэгжүүлж болно гэдгийг анхаарна уу.

Шийдвэр. Бидний эцсийн хувилбар нь дараах байдалтай байна:

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

Одоо зураг ашиглан дэлгэрэнгүй түүний бүрэлдэхүүн хэсгүүдийг дүн шинжилгээ хийх.

шаардлага 1 URL ямар ч тэмдэгт байх ёсгүй өмнө
Нэхэмжлэлийг 2 заавал PREFIX байгаа эсэхийг шалгах хэрэгтэй "HTTP»
Зүйлийн 3 ямар ч тэмдэглэгээ байх ёстой
Нэхэмжлэлийг 4 Хэрвээ тэнд «с» нь баталгаатай холболт URL оноо «HTTPS»
Нэхэмжлэлийг 5 шаардлагатай хэсэг "//"
Нэхэмжлэлийг 6 ямар ч тэмдэгт
х. 7-9 Шалгах анхан шатны домэйныг болон цэгийн байгааг
p.10-13 Хоёр дахь түвшин, цэг бичих домэйныг шалгах
p.14-17

Файл бүтэц URL - тоо, үсэг, доогуур зураас, зураасан, цэгүүд тогтоосон бөгөөд эцэст нь налуу зураасаар

кредит картын дугаарыг шалгах

Даалгавар. Та хамгийн түгээмэл төлбөрийн системд орж кредит карт тоо баталгаажуулалтыг хэрэгжүүлэх хэрэгтэй. зөвхөн карт зориулсан хувилбар Visa болон MasterCard.

Шийдвэр. үзэл бодлоо илэрхийлэх бий болгох үед нь хэрэв та оролтын өрөөнд харгалзан цоорхойг боломжтой байгааг авч үзэх хэрэгтэй. газрын зураг дээр оронтой хялбар уншиж, хэлж өгснийг нь бүлгүүдэд хуваагдана. Тиймийн тул, энэ хүн (жишээ нь. E. орон зайг ашиглан) энэ аргаар хэд хэдэн орох оролдож болно гэсэн байгалийн юм.

харгалзан аль болох зай эсвэл hyphens авдаг түгээмэл илэрхийлэл бич, зүгээр л цифр бусад бүх тэмдэгт хаяна илүү төвөгтэй байдаг. Тиймээс бид бүх нийтийн илэрхийлэл / D, цифр бусад бүх тэмдэгтийг устгана ашиглан санал болгож байна.

Одоо та шалгах тоотой шууд явж болно. Бүх компаниуд, кредит карт гаргагч өвөрмөц тоо форматыг ашигладаг. Жишээ нь энэ нь ашиглаж байгаа, мөн үйлчлүүлэгч компанийн нэрийг оруулах шаардлагатай биш юм - энэ нь олон тооны тодорхойлно. Виза карт үргэлж тоо 4 эхэлж, 13 буюу 16 оронтой урттай байдаг. MasterCard Үүний үр дүнд урт тоо 16 нь 51-55 -г хүрээнд эхэлдэг, бид дараах илэрхийллийг авах:

захиалга боловсруулах өмнө цаашид тоо, Luhn алгоритм дээр тооцдог сүүлийн цифрийг туршиж болно.

Шалгах утасны дугаар

Даалгавар. оруулсан утасны дугаарыг үнэн зөв шалгаж байна.

Шийдвэр. суурин болон хөдөлгөөнт утасны тоо оронтой тоо нэлээд улс хамаарч өөр өөр байдаг тул нийтээр, утасны дугаар нь зөв боломжгүй тогтмол илэрхийлэл ашиглан шалгах хэрэгтэй. Харин олон улсын тоо загварыг шалгах чанд формат, төгс байна. Бүр илүү илүү их, илүү үндэсний утасны операторууд нэг стандартыг хангасан гэж оролдож байгаа тул. Өрөөний бүтэц дараах байдалтай байна:

+ CCC.NNNNNNNNNNxEEEE, хаана:

- C - 1-3 тооноос тогтдог улсын код юм.

- N - тоо 14 хүртэл оронтой тоо.

- E - нэмэлт өргөтгөл.

Дээрээс нь чухал элемент юм, тэмдэг X шаардлагатай үед л өргөтгөлтэй байх юм.

Үүний үр дүнд бид дараах илэрхийллийг байна:

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

тархац нутагт тоо

Даалгавар. Энэ нь тодорхой хэмжээний давхцал бүхэл тоо хангах шаардлагатай байна. Үүнээс гадна, энэ нь тогтмол илэрхийлэл хүрээний зөвхөн тоо олох шаардлагатай байдаг.

Шийдвэр. Энд хамгийн түгээмэл тохиолдол нь зарим нь хэдэн илэрхийлэл нь:

1-ээс 24 цаг тогтоох ^ (1 [0-2] | [1-9]) $
сарын 1-31 өдөр ^ (3 [01] | [12] [0-9] | [1-9]) $
Секунд эсвэл минут 0-59 ^ [1-5]? [0-9] $
1 100 хүртэл тооны * (100 |? [1-9] [0-9]) $
жилийн 1-366 өдөр ^ (36 [0-6] | 3 [0-5] [0-9] | [12] [0-9] {2} |? [1-9] [0-9]) $

Хайлт IP-хаяг

Даалгавар. Энэ нь тухайн мөр 000.000.000.000-255.255.255.255-ээс IPv4 форматаар зөв IP-хаяг эсэхийг тодорхойлох шаардлагатай байна.

Шийдвэр. PHP хэл дээр ямар ч асуудал адил тогтмол илэрхийлэл олон varintov байна. Жишээ нь энэ:

илэрхийлэл Онлайн шалгалт

эхлэн Учир нь "байнгын" програмчлалын хэлний ялгаатай синтаксын нарийн төвөгтэй, хүнд хэцүү байж болох нь зөв regex шалгана уу. Энэ асуудлыг шийдэхийн тулд та жинхэнэ текстийн онд байгуулагдсан загвар үнэн зөв эсэхийг шалгах нь хялбар болгох олон онлайн тест илэрхийлэл байдаг. програмист илэрхийлэл ба баталгаажуулалтын мэдээлэл орж, даруй боловсруулах үр дүнг үзнэ үү. Ихэвчлэн жишиг хэсгийг хамгийн удаан хэлээр тогтмол илэрхийлэл, жишээ, хэрэгжилтийн ялгааг дэлгэрэнгүй танилцуулж байна.

Харин бүрэн итгэлцлийн онлайн үйлчилгээний үр дүн PHP ашигладаг бүх хөгжүүлэгчид нь санал болгосон байна. А тогтмол илэрхийлэл, бичигдсэн байдаг ба биечлэн шалгаж мэргэжил бий болгож, алдаа байхгүй баталгаа.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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