КампутарыПраграмаванне

PHP (рэгулярны выраз) - што гэта такое? Прыклады і праверка рэгулярных выразаў

Пры працы з тэкстамі ў любым сучасным мове праграмавання распрацоўшчыкі пастаянна сустракаюцца з задачамі праверкі уведзеных дадзеных на адпаведнасць патрэбнага шаблоне, пошуку і замены тэставых фрагментаў і іншымі тыпавымі аперацыямі па апрацоўцы знакавай інфармацыі. Распрацоўка ўласных алгарытмаў праверкі прыводзіць да страты часу, несумяшчальнасці праграмнага кода і складанасці ў яго развіцці і мадэрнізацыі.

Бурнае развіццё Інтэрнэту і моў WEB-распрацоўкі запатрабавала стварэння універсальных і кампактных сродкаў апрацоўкі тэкставай інфармацыі пры мінімальным памеры неабходнай для гэтага кода. Не з'яўляецца выключэннем і папулярны сярод пачаткоўцаў і прафесійных распрацоўнікаў мова PHP. Рэгулярны выраз як мова тэкставых шаблонаў дазваляе спрасціць задачы апрацоўкі тэксту і паменшыць праграмны код на дзясяткі і сотні радкоў. Многія задачы наогул немагчыма вырашыць без яго.

Рэгулярныя выразы ў PHP

Мова PHP змяшчае тры механізмы працы з рэгулярнымі выразамі - «ereg», «mb_ereg» і «preg». Найбольш распаўсюджаным з'яўляецца інтэрфейс «preg», функцыі якога забяспечваюць доступ да бібліятэкі падтрымкі рэгулярных выразаў PCRE, першапачаткова распрацаванай для мовы Perl, якая ўваходзіць у камплект PHP. Preg-функцыі шукаюць у зададзенай тэкставай радку супадзення, паводле пэўнага шаблону на мове рэгулярных выразаў.

асновы сінтаксісу

У рамках кароткай артыкула немагчыма падрабязна апісаць увесь сінтаксіс рэгулярных выразаў, для гэтага існуе спецыяльная літаратура. Прывядзём толькі асноўныя элементы для паказу шырокіх магчымасцяў для распрацоўніка і разумення прыкладаў кода.

У PHP рэгулярны выраз фармальна вызначаецца вельмі складана, і таму спросцім апісанне. Рэгулярны выраз ўяўляе сабой тэкставую радок. Яна складаецца з вылучанага падзельнікам шаблону і мадыфікатара, паказваў на тое, якім чынам яго апрацоўваць. Магчыма ўключэнне ў шаблоны розных альтэрнатыў і паўтораў.

Напрыклад, у выразе / \ d {3} - \ d {2} - \ d {2} / m падзельнікам будзе «/», далей ідзе шаблон, а знак «m» будзе мадыфікатарам.

Уся моц рэгулярных выразаў кадуецца з дапамогай метасімвалаў. Асноўным метасімвалы мовы з'яўляецца зваротны слэш - «\». Ён мяняе тып наступнага за ім сімвала на супрацьлеглы (т. Е. Звычайны сімвал ператвараецца ў Метасімвал і наадварот). Іншым важным метасімвалы з'яўляецца прамая рыса «|», якая задае альтэрнатыўныя варыянты шаблону. Яшчэ прыклады метасімвалаў:

^ Пачатак аб'екта або радкі
( Пачатак подшаблона
) Заканчэнне подшаблона
{ Пачатак квантификатора
} канец квантификатора
\ d дзесятковая лічба ад 0 да 9
\ D любы знак, які не з'яўляецца лічбай
\ s пусты сімвал, прабел, табуляцыя
\ w слоўнікавы сімвал

PHP, апрацоўваючы рэгулярныя выразы, прабел разглядае як асобны істотны сімвал, таму выразы АБВГДЕ і АБВ ГДЕ з'яўляюцца рознымі.

подшаблона

У PHP рэгулярныя подшаблона вылучаюцца круглымі дужкамі і часам называюцца «подвыражениями». Выконваюць наступныя функцыі:

  1. Вылучэнне альтэрнатыў. Напрыклад, шаблон жар (сёй | птушка |) супадзе са словамі «жар», «жар-птушка» і «спякотнае». А без дужак гэта будзе толькі пусты радок, «птушка» і «спякотнае».

  2. «Захапляльны» подшаблона. Гэта азначае, што калі ў шаблоне супала падрадок, то ў якасці выніку вяртаюцца ўсе супадзення. Для нагляднасці прывядзем прыклад. Дадзена наступнае рэгулярны выраз: пераможца атрымлівае ((залатую | пазалочаны) (медаль | кубак)) - і радок для пошуку супадзенняў: «пераможца атрымлівае залаты медаль». Акрамя зыходнай фразы, у выніку пошуку будуць выдадзены: «залатую медаль», «медаль», «залатую».

Аператары паўтораў (квадрификаторы)

Пры складанні рэгулярных выразаў вельмі часта неабходна аналізаваць паўтарэння лікаў і сімвалаў. Гэта не з'яўляецца праблемай, калі паўтораў не вельмі шмат. Але што рабіць, калі мы не ведаем іх дакладнага ліку? У такім выпадку неабходна выкарыстоўваць спецыяльныя метасімвалы.

Для апісання паўтораў прымяняюцца квадрификаторы - метасімвалы для задання колькасці. Квадрификаторы бываюць двух тыпаў:

  • агульныя, зняволеныя ў дужкі;
  • скарочаныя.

Агульны квантификатор зачэплены мінімальная і максімальная колькасць дазволеных паўтораў элемента ў выглядзе двух лікаў у фігурных дужках, напрыклад так: х {2,5}. Калі максімальную колькасць паўтораў невядома, другі аргумент не паказваецца: х {2,}.

Скарочаныя квантификаторы ўяўляюць сабой сімвалы для найбольш распаўсюджаных паўтораў у пазбяганне лішняй перагрузкі сінтаксісу. Звычайна выкарыстоўваюцца тры скарачэнні:

1. * - нуль і больш паўтораў, што эквівалентна {0,}.

2. + - адно і больш паўтораў, т. Е. {1,}.

3.? - нуль або толькі адно паўтор - {0,1}.

Прыклады рэгулярных выразаў

Для тых, хто вывучае рэгулярныя выразы, прыклады - лепшы падручнік. Мы прывядзем некалькі, якія паказваюць іх шырокія магчымасці пры мінімуме высілкаў. Усе праграмныя коды цалкам сумяшчальныя з версіямі PHP 4.x і вышэй. Для поўнага разумення сінтаксісу і выкарыстання ўсіх магчымасцяў мовы рэкамендуем кнігу Дж. Фрыдла «Рэгулярныя выразы», дзе цалкам разглядаецца сінтаксіс і маюцца прыклады рэгулярных выразаў не толькі на PHP, але і для моў Python, Perl, MySQL, Java, Ruby і C #.

Праверка карэктнасці адрасы E-mail

Задача. Існуе Інтэрнэт-старонка, на якой у наведвальніка запытваецца адрас email. Рэгулярны выраз павінна правяраць правільнасць атрыманага адрасу перад адпраўкай паведамленняў. Праверка не дае гарантыі, што ўказаны паштовую скрыню рэальна існуе і прымае лісты. Але адсеяць заведама няправільныя адрасы яна можа.

Рашэнне. Як і ў любой мове праграмавання, на PHP рэгулярныя выразы email-праверкі адрасы могуць быць рэалізаваны рознымі спосабамі, і прыклады ў гэтай артыкуле не з'яўляюцца канчатковым і адзіным варыянтам. Таму ў кожным выпадку мы будзем прыводзіць пералік патрабаванняў, якія трэба ўлічыць пры праграмаванні, а канкрэтная рэалізацыя цалкам залежыць ад распрацоўніка.

Такім чынам, выраз, правяраць правільнасць email, павінна правяраць наступныя ўмовы:

  1. Наяўнасць у зыходнай радку сімвала @ і адсутнасць прабелаў.
  2. Даменная частка адрасу, за сімвалам @, ёсць толькі наступная дапушчальныя сімвалы для даменных імёнаў. Тое ж адносіцца і да імя карыстальніка.
  3. Пры праверцы імя карыстальніка неабходна вызначыць наяўнасць адмысловых знакаў, такіх як апостраф або вертыкальная рыса. Такія знакі ставяцца да патэнцыйна небяспечным і могуць утрымлівацца ў такіх відах нападаў, як SQL-ін'екцыі. Пазбягайце такіх адрасоў.
  4. Імёны карыстальніка дапускаюць наяўнасць толькі адной кропкі, якая не можа быць першым або апошнім сімвалам ў радку.
  5. Даменнае імя павінна змяшчаць не менш за два і не больш за шэсць знакаў.

Прыклад, які ўлічвае ўсе названыя ўмовы, можна ўбачыць далей на малюнку.

Праверка правільнасці адрасоў URL

Задача. Праверыць, ці з'яўляецца зададзеная тэкставы радок дапушчальным адрасам URL. Яшчэ раз адзначым, што рэгулярныя выразы URL-праверкі могуць быць рэалізаваны рознымі спосабамі.

Рашэнне. Наш выніковы варыянт выглядае наступным чынам:

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

Цяпер разбярэм яго складнікі больш падрабязна, выкарыстоўваючы малюнак.

п.1 Перад адрасам URL не павінна быць ніякіх сімвалаў
п.2 Правяраем наяўнасць абавязковага прэфікса «http»
п.3 Не павінна быць сімвалаў
п.4 Калі прысутнічае «s», то URL паказвае на абароненае злучэнне «https»
п.5 Абавязковы фрагмент «//»
п.6 няма сімвалаў
п. 7-9 Праверка правільнасці дамена першага ўзроўню і наяўнасці пункту
п.10-13 Кантроль правільнасці напісання дамена другога ўзроўню і пункту
п.14-17

Файлавая структура URL - набор лічбаў, літар, падкрэсьліваньнем, дэфісаў, кропак і слэш у канцы

Правяраем нумары крэдытных карт

Задача. Неабходна рэалізаваць праверку правільнасці ўведзенага нумара пластыкавай карты найбольш распаўсюджаных плацежных сістэм. Разгледжаны варыянт толькі для карт Visa і MasterCard.

Рашэнне. Пры стварэнні выразы неабходна ўлічваць магчымае наяўнасць ва ўведзеным нумары прабелаў. Лічбы нумара на карце падзеленыя на групы для спрашчэння чытання і дыктоўкі. Таму цалкам натуральна, што чалавек можа паспрабаваць ўвесці нумар такім чынам (т. Е. Выкарыстоўваючы прабелы).

Напісаць ўніверсальнае выраз, якое ўлічвае магчымыя прабелы і злучок, складаней, чым проста адкінуць усе сімвалы, акрамя лічбаў. Таму ў выразе рэкамендуецца выкарыстоўваць Метасімвал / D, які выдаляе ўсе знакі, акрамя лічбаў.

Цяпер можна пераходзіць непасрэдна да праверцы нумары. Усе кампаніі, якія выпускаюць крэдытныя карты, выкарыстоўваюць унікальны фармат нумары. У прыкладзе гэта выкарыстоўваецца, і кліенту няма неабходнасці ўводзіць найменне кампаніі - яна вызначаецца па нумары. Карты Visa заўсёды пачынаюцца з 4 і маюць даўжыню нумара ў 13 ці 16 лічбаў. MasterCard пачынаецца ў дыяпазоне 51-55 з даўжынёй нумары 16. У выніку атрымліваем такі выраз:

Перад апрацоўкай замовы можна правесці дадатковую праверку апошняй лічбы нумара, якая вылічаецца па алгарытме Месяц.

Праверка тэлефонных нумароў

Задача. Праверка карэктнасці уведзенага тэлефоннага нумара.

Рашэнне. Колькасць лічбаў у стацыянарных і мабільных тэлефонных нумарах значна адрозніваецца ў залежнасці ад краіны, таму універсальна праверыць, выкарыстоўваючы рэгулярныя выразы, нумар тэлефона на правільнасць немагчыма. Але міжнародныя нумары маюць строгі фармат і выдатна падыходзяць для праверкі па шаблоне. Тым больш што ўсё больш нацыянальных тэлефонных аператараў імкнуцца адпавядаць адзіным стандарце. Структура нумары наступная:

+ CCC.NNNNNNNNNNxEEEE, дзе:

- C - гэта код краіны, які складаецца з 1-3 лічбаў.

- N - нумар даўжынёй да 14 лічбы.

- E - неабавязковае пашырэнне.

Плюс з'яўляецца абавязковым элементам, а знак х прысутнічае толькі пры неабходнасці пашырэння.

У выніку маем наступнае выраз:

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

Чысла ў дыяпазоне

Задача. Неабходна забяспечыць супадзенне цэлага ліку з вызначанага дыяпазону. Дадаткова неабходна, каб знаходзілі рэгулярныя выразы толькі лічбы з дыяпазону значэнняў.

Рашэнне. Прывядзём некалькі выразаў для некалькіх найбольш распаўсюджаных выпадкаў:

Вызначаем гадзіну ад 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-адрасы

Задача. Неабходна вызначыць, ці з'яўляецца зададзеная радок дапушчальным IP-адрасам у фармаце IPv4 ў дыяпазоне ад 000.000.000.000-255.255.255.255.

Рашэнне. Як і ў любой задачы на мове PHP, рэгулярны выраз мае мноства варинтов. Напрыклад, такое:

Онлайн-праверка выразаў

Праверка рэгулярных выразаў на правільнасць для пачаткоўцаў праграмістаў можа быць цяжкай з-за складанасці сінтаксісу, які адрозніваецца ад «звычайных» моў праграмавання. Для вырашэння гэтай праблемы існуе мноства онлайн-тэстараў выразаў, якія дазваляюць лёгка праверыць правільнасць створанага шаблону на рэальным тэксце. Праграміст ўводзіць выраз і дадзеныя для праверкі і імгненна бачыць вынік апрацоўкі. Звычайна тут жа прысутнічае даведачны раздзел, дзе падрабязна апісваюцца рэгулярныя выразы, прыклады і адрозненні рэалізацыі для найбольш распостраненных моў праграмавання.

Але цалкам давяраць вынікам онлайн-сэрвісаў не рэкамендуецца ўсім распрацоўнікам, якія карыстаюцца PHP. Рэгулярны выраз, напісанае і праверанае асабіста, павышае кваліфікацыю і гарантуе адсутнасць памылак.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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