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

Javascript, рэгулярны выраз: прыклады, праверка рэгулярных выразаў

Да з'яўлення моў гіпертэксту, а хутчэй, да таго моманту, як стала ясным, што трэба не толькі шукаць, але і рабіць гэта пры пэўных умовах, у пэўным месцы, пры змяніліся дадзеных, у патрэбных колькасцях, звычайныя функцыі пошуку і замены ладзілі любога спрактыкаванага праграміста. Ствараліся шэдэўры пошукавага мастацтва на мовах праграмавання, а базы дадзеных выдасканальваліся ў формах умоў выбаркі, абсталёўваліся захоўваемымі працэдурамі, трыгерамі і іншымі сродкамі выбаркі з грувасткіх рэляцыйных інфармацыйных кампазіцый. З'яўленне рэгулярных выразаў да рэвалюцыі не прывяло, але апынулася карысным і зручным сродкам для пошуку і замены інфармацыі. Напрыклад, рэгулярныя выразы JavaScript email істотна спрашчаюць рэгістрацыю наведвальнікаў, не загружаюць сайт адпраўкай паведамленняў па неіснуючым адрасах.

Сказаць, што на JavaScript рэгулярны выраз значна лепш продуманнных паслядоўнасцяў выклікаў indexOf () у абрамленні умоўных і цыклічных аператараў, нельга, але сцвярджаць, што яно зрабіла код скрыпту кампактным, але слаба зразумелым недасведчанаму, можна адназначна.

Аб'ект RegExp = шаблон + рухавічок

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

Асаблівая натацыя пры напісанні рэгулярных выразаў вельмі ўтульны і досыць эфектыўная, але патрабуе ўважлівасці, акуратнасці і цярпення ад распрацоўніка. Да натацыі шаблонаў рэгулярных выразаў трэба прывыкнуць. Гэта не даніна модзе, гэта логіка рэалізацыі механізму «JavaScript рэгулярныя выразы».

Шаблон рэгулярнага выразы

Дапускаецца два варыянты:

var expOne = / abc * / i;

var expTwo = RegExp ( "abc *", "i");

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

'I' - сцяг, які азначае "рэгістр не важны». Можна выкарыстоўваць таксама сцягі 'g' - «глабальны пошук» і 'm' - шматрадковы пошук.

Знак '/' прынята выкарыстоўваць для абазначэння шаблону.

Пачатак і канец назваў паведамленняў

Знак '^' вызначае сімвал (ы), з якога пачынаецца рэгулярны выраз, а '$' вызначае якой сімвал (ы) павінен быць у канцы. Не варта эксперыментаваць з імі ўнутры выразы, там у іх іншы сэнс.

напрыклад,

var eRegExp = new RegExp (cRegExp, 'i');

var cRegRes = '';

var sTest = 'AbcZ';

if (eRegExp.test (sTest)) {

cRegRes + = '- Yes';

} Else {

cRegRes + = '- No';

}

var dTestLine = document.getElementById ( 'scTestLine');

dTestLine.innerHTML = 'Выраз /' + cRegExp + '/ для радка "' + sTest + '"' + cRegRes.

У элеменце 'scTestLine' будзе вынік (зменная cRegExp мае адпаведнае значэнне):

выраз / ^ AbcZ $ / для радка "abcz" - Yes

Калі прыбраць сцяг 'i', то вынік будзе:

выраз / ^ AbcZ $ / для радка "abcz" - No

Змест назваў паведамленняў

Рэгулярны выраз ёсць паслядоўнасць знакаў, якая з'яўляецца прадметам пошуку. Выраз / qwerty / шукае ўваходжанне менавіта гэтай паслядоўнасці:

выраз / qwerty / для радка "qwerty" - Yes

выраз / qwerty / для радка "123qwerty456" - Yes

Знак '^' мяняе сутнасць выказвання:

выраз / ^ qwerty / для радка "123qwerty456" - No

выраз / ^ qwerty / для радка "qwerty456" - Yes

Аналагічна для сімвала канца радка. Рэгулярныя выразы дапускаюць паслядоўнасці: напрыклад, [az], [AZ], [0-9] - усё літары лацінскага алфавіту ў паказаным рэгістры або лічбы. Рускія літары таксама дапускаецца выкарыстоўваць, аднак варта звяртаць увагу на кадоўку радкоў (дзе шукаецца, што шукаецца) і старонкі. Часта расейскія літары, як і адмысловыя знакі, пераважна задаваць кодамі.

Пры фарміраванні назваў паведамленняў можна паказваць варыянты наяўнасці тых ці іншых сімвалаў у пэўным месцы, пры гэтым іх колькасць задаецца так: '*' = паўтарэнне 0 або больш раз; '+' = Паўтор 1 або больш раз; {1,} тое самае, што і '+'; {N} = паўтарэнне роўна n раз; {N,} = паўтарэнне n і больш разоў; {N, m} = паўтор ад n да m раз.

Выкарыстоўваючы квадратныя дужкі, можна паказаць варыянты сімвала з набору. Гэта выглядае так. [Abcd] = [ad] = любы знак з чатырох: 'a', 'b', 'c' ці 'd'. Можна паказаць адваротнае. Любы сімвал, акрамя названых у наборы: [^ abcd] = любы сімвал акрамя 'a', 'b', 'c' ці 'd'. '?' паказвае, што ў дадзеным месцы сімвала можа і не быць. '.' вызначае любы знак, акрамя які пазначае пераклад радка. Гэта '\ n', '\ r', '\ u2028' ці '\ u2029'. Выраз '\ s * | \ S *' = '[\ s | \ S] *' азначае пошук любога знака, уключаючы пераклады радкоў.

Спрошчаныя варыянты назваў паведамленняў

Выраз '[\ s | \ S] *' - пошук прабелу або яго адсутнасці, гэта значыць усяго, што ёсць у радку. У дадзеным выпадку пазначэнне '\ s' азначае прабел, а '\ S' - яго адсутнасць.

Аналагічна можна выкарыстоўваць '\ d' для пошуку дзесятковай лічбы, а '\ D' знойдзе нялічбавыя сімвал. Абазначэння '\ f', 'r' і '\ n' адпавядаюць form-feed, carriage return і line-feed.

Сімвал табуляцыі - '\ t', вертыкальнай - '\ v'. Пазначэнне '\ w' знойдзе любы сімвал лацінскага алфавіту (літары, лічбы, знак падкрэслівання) = [A-Za-z0-9_].

Пазначэнне '\ W' эквівалентна [^ A-Za-z0-9_]. Гэта азначае любы сімвал, які не з'яўляецца літарай лацінскага алфавіту, лічбай або знакам '_'.

Пошук сімвала '\ 0' = пошук сімвала NUL. Пошук '\ xHH' ці '\ uHHHH' = пошук сімвала з кодам HH або HHHH адпаведна. H - шаснаццатковы лічба.

Рэкамендуемая фармулёўка і кадоўка назваў паведамленняў

Любое рэгулярны выраз важна ўважліва тэставаць на розных варыянтах радкоў.

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

Выбіраючы паміж класікай (дакладнае ўказанне) і спрошчаным варыянтам назваў паведамленняў, лепш аддаць перавагу першую. Бо ў класіцы заўсёды выразна пазначана, што і як шукаецца. Калі ў рэгулярным выразе або ў радку пошуку ёсць рускія літары, варта прывесці да адзінай кадоўцы ўсе радкі і старонку, на якой функцыянуе JavaScript-код, які выконвае рэгулярны выраз.

Калі ідзе апрацоўка сімвалаў, якія не належаць лацінскаму алфавіце, мае сэнс разгледзець ўказанне кодаў сімвалаў, а не саміх знакаў.

Пры рэалізацыі алгарытмаў пошуку на JavaScript рэгулярны выраз варта старанна правяраць. Асабліва важна кантраляваць кадоўку знакаў.

Дужкі ў рэгулярных выразах

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

var cRegExp = "[az] *. (png | jpg | gif)";

var eRegExp = new RegExp (cRegExp, 'i');

var cRegRes = '';

var sTest = 'picture.jpg';

if (eRegExp.test (sTest)) {

cRegRes + = '- Yes';

} Else {

cRegRes + = '- No';

}

вынікі:

выраз /[az]*.(png|jpg|gif)/ для радка "picture.jpg" - Yes

выраз /^[ad][az]*.(png|jpg|gif)/ для радка "picture.jpg" - No

выраз /^[ad][az]*.(png|jpg|gif)/ для радка "apicture.jpg" - Yes

выраз /^[ad][az]*.(png|jpg|gif)/ для радка "apicture.jg" - No

Варта асоба адзначыць, што ўсе, пасля чаго варта зорачка, можа прысутнічаць нуль раз. Гэта азначае, што «рэгуляркі» можа спрацаваць самым нечаканым чынам як мінімум.

Праверка RegExp - тэставанне email

На JavaScript рэгулярныя выразы атрымліваюць два метаду, test і exec, і могуць быць выкарыстаны ў аб'ектах радкоў (String) у іх метадах (функцыях): search, split, replace і match.

Метад test ўжо быў прадэманстраваны, ён дазваляе праверыць правільнасць рэгулярнага выразы. Вынік метаду: true / false.

Разгледзім наступныя рэгулярныя выразы JavaScript. Праверка email з ліку «складана, але дакладна":

var eRegExp = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s @ "] +) *) | (". + ")) @ ((\ [[0-9] {1,3} \. [0-9] {1,3} \. [0-9] { 1,3} \. [0-9] {1,3}]) | (([a-zA-Z \ -0-9] + \.) + [a-zA-Z] {2,}) ) $ /;

для радкі var sTest ='SlavaChip@sci.by 'дае true, то ёсць дадзеная радок з'яўляецца правільным email-адрасам. Праверка была праведзена метадам eRegExp.test (sTest).

Практычнае выкарыстанне: апрацоўка e-Mail

Метад exec на выхадзе дае масіў, выклік:

var aResult = eRegExp.exec (sTest);

cRegRes = '
' + aResult.length + '
';
for (var i = 0; i cRegRes + = aResult [i] + '
';
}

дае такі вынік:

9
Slava.Chip@sci.by
Slava.Chip
Slava.Chip
.Chip
undefined
sci.by
undefined
sci.by
sci.

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

Папулярныя «рэгуляркі»

Прыведзенае JavaScript рэгулярны выраз для eMail не адзінае, ёсць мноства больш простых варыянтаў. Напрыклад, /^[\w-\.]+@[\w-]+\.[az]{2,3}$/i. Аднак гэты варыянт ўлічвае не ўсе варыянты запісу электроннага адрасу.

Безумоўна, неабходна праглядаць вопыт калег, аналізаваць прапанаваныя імі спосабы, перш чым праектаваць ўласнае на JavaScript рэгулярны выраз. Але ёсць і пэўныя складанасці. Не варта забываць, што на JavaScript рэгулярныя выразы (прыклады іх пры капіяваньні) могуць прадубляваць істотныя сімвалы: '\', '/' ці двукоссі. Гэта прывядзе да памылкі, якую можна доўга шукаць.

Важна ўлічваць звыклы «чалавечы аспект". Бо фармальнае JavaScript рэгулярны выраз для тэлефона, які можа быць наведвальнікам (чалавекам), бывае паказана рознымі спосабамі: 123-45-67, (29) 1234567, 80291234567 або 375.291.234.567. І гэта ўсё адзін і той жа нумар. Варыянт напісання некалькіх шаблонаў не заўсёды прымальны, а жорсткая фіксацыя правілы для напісання нумара можа стварыць непатрэбнае нязручнасць або абмежаванні. Варыянт / ^ \ d [\ d \ (\) \ -] {4,14} \ d $ / i падыходзіць для большасці выпадкаў праверкі нумара тэлефона.

Калі неабходна скласці JavaScript рэгулярныя выразы, толькі лічбы правяраюць, ці то нават такі просты выпадак патрабуе ўдакладненняў. Ён павінен разглядаць цэлы лік або дробавую, экспанентны запіс або звычайную, станоўчае лік ці адмоўнае. Можна ўлічваць таксама наяўнасць сімвала валюты, лік лічбаў пасля коскі і падзел цэлай часткі чысла на трыяды.

Выраз / ^ \ d + $ / i праверыць толькі лічбы, а выраз /^\d+\.\d+$/i дазваляе выкарыстоўваць кропку для ўказанні дробавай часткі ліку.

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

Праверка даты - проста аб складаным

Разгледзім яшчэ JavaScript рэгулярныя выразы. Прыклады для даты, як і для ліку ці нумары тэлефона ўяўляюць сабой выбар паміж калянасцю і гнуткасцю. Дата падзеі - адно з істотных дадзеных, якія часта даводзіцца ўводзіць. Але фіксацыя ўводу ў пэўным фармаце: 'дд-мм-гггг' ці 'д.м.гг' часта прыводзіць да незадаволенасці кліента. Пераход ад поля ўводу дня да месяца, выкананы класічнай HTML-формай, можа не адбыцца пры ўводзе толькі адной лічбы, а ўвод другі можа выклікаць цяжкасці. Напрыклад, у поле дня было ўжо ўведзена 3, а наступная лічба 2 ня замяшчае першую, і прыпісваецца да яе 32, што, натуральна, выкліча нязручнасць.

Эфектыўнасць і зручнасць рэгулярных выразаў істотна залежаць ад агульнага пабудовы дыялогу з наведвальнікам. У адным выпадку для ўказанні даты мэтазгодна выкарыстоўваць адно поле ўводу формы, у іншым выпадку трэба прадугледзець розныя поля для дня, месяца і года. Але тады паўстануць дадатковыя «выдаткі кода» на праверку высакоснага года, колькасці месяцаў, колькасці дзён у іх.

Пошук з заменай, памяць назваў паведамленняў

JavaScript replace (рэгулярныя выразы) выкарыстоўваюць метад аб'екта String і дазваляюць знаходзіць значэнне і адразу яго змяняць. Гэта зручна для выпраўлення памылак ўводу, рэдагавання змесціва палёў формаў і для пераўтварэння дадзеных з аднаго фармату прадстаўлення ў іншы.

var cRegExp = / ([а-я] +) \ s ([а-я] +) \ s ([а-я] +) / i; // пры пошуку ствараюцца тры 'зменных'

var sTest = 'гэтая артыкул добрая!';
var cRegRes = sTest.replace (cRegExp, "$ 2, $ 3, $ 1");

var dTestLine = document.getElementById ( 'scTestLine');

dTestLine.innerHTML = 'Выраз' + cRegExp + 'для радка "' + sTest + '" атрымаецца:' + cRegRes;

Вынік:

выраз / ([а-я] +) \ s ([а-я] +) \ s ([а-я] +) / i для радка "гэтая артыкул добрая!" атрымаецца: артыкул, добрая, гэтая!

Пры выкананні кожная пара круглых дужак запамінае вынік у 'зменнай' $ n, дзе n - нумар пары дужак ($ 1, $ 2, ...). У адрозненне ад агульнапрынятай, тут нумарацыя зменных вядзецца з 1, а не з 0.

агульныя рэкамендацыі

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

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

Выкарыстоўваючы паўтарэння знакаў і радкоў, то ёсць адмысловыя знакі '*', '+' і фігурныя дужкі, якія паказваюць колькасці паўтораў, варта кіравацца прынцыпамі прастаты і мэтазгоднасці. Важна разумець, што рэгулярны выраз з моманту пачатку яго працы і да атрымання выніку цалкам ва ўладзе рухавічка выкарыстоўванага браўзэра. Не ўсе мовы JavaScript эквівалентныя. Кожны браўзэр можа прыўнесці свае асабістыя перавагі ў інтэрпрэтацыі рэгулярных выразаў.

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

JavaScript, String і RegExp

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

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

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

Разуменне структуры і логікі аб'екта RegExp, сэнсу аб'екта String, сінтаксісу і семантыкі JavaScript - верная гарантыя бяспечнага і надзейнага кода, стабільнай працы кожнай старонкі і сайта ў цэлым.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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