Регулярні вирази та перевірка даних у формах

Регулярні вирази та перевірка даних у формах

Що таке регулярні вирази та як їх використовувати?

Регулярний вираз, або скорочено regex, — це шаблон, що описує певний обсяг тексту. Наприклад, якщо ви хочете переконатися, що особа, яка заповнює форму, надсилає саме той текст, який вам потрібен, ви можете використовувати регулярний вираз, щоб забезпечити певний шаблон введення або перевірити дані.

Наприклад, припустимо, що ви хочете запросити номер національного страхування Великої Британії (NIN). Він має шаблон із 2 символів, за якими йдуть 6 цифр, а потім ще один символ. Регулярний вираз, що відповідає цьому шаблону, буде таким:

[аз|Аризона]{2}[0-9]{6}[аз|Аризона]

Тут [az] означає «будь-який символ нижнього регістру», [AZ] означає «будь-який символ верхнього регістру», | означає «або», тому [az|AZ] означає «будь-який символ», {2} означає «повторити двічі» тощо.

Деякі уряди надають регулярні вирази для поширених шаблонів. Наприклад, дивіться цю статтю Вікіпедії про поштові індекси Великої Британії.

Щоб швидко ознайомитися з регулярними виразами, знайдіть «Посібник з регулярних виразів» або читайте далі.

Персонаж

Легенда

Приклад

Зразок збігу

\d

Більшість двигунів: одна цифра
від 0 до 9

файл_\d\d

файл_25

\d

.NET, Python 3: одна цифра Unicode у будь-якому скрипті

файл_\d\d

файл_9੩

\w

Більшість рушіїв: "символ слова": літера ASCII, цифра або підкреслення

\w-\w\w\w

A-b_1

\w

.Python 3: "символ слова": літера, ідеограма, цифра або символ підкреслення Unicode

\w-\w\w\w

字-ま_۳

\w

.NET: "символ слова": літера, ідеограма, цифра або з'єднувач Unicode

\w-\w\w\w

字-ま‿۳

\s

Більшість рушіїв: "символ пробілу": пробіл, табуляція, новий рядок, повернення каретки, вертикальна табуляція

a\sb\sc

аб
с

\s

.NET, Python 3, JavaScript: "символ пробілу": будь-який роздільник Unicode

a\sb\sc

аб
с

\D

Один символ, який не є цифрою , як визначено у \d вашого движка

\D\D\D

Абетка

\W

Один символ, який не є символом слова , як визначено у \w вашої системи

\В\В\В\В\В\В

*-+=)

\S

Один символ, який не є пробілом , як визначено у \s вашого рушія

\С\С\С\С\С

Йойо

Квантори

Квантор

Легенда

Приклад

Зразок збігу

+

Один або декілька

Версія \w-\w+

Версія A-b1_1

{3}

Рівно три рази

\D{3}

Абетка

{2,4}

Від двох до чотирьох разів

\d{2,4}

156

{3,}

Три або більше разів

\w{3,}

підручник_з_регулярного_виразу

*

Нуль або більше разів

А*Б*В*

АААКК

?

Один раз або жодного

множини?

множина

Більше персонажів

Персонаж

Легенда

Приклад

Зразок збігу

.

Будь-який символ, крім розриву рядка

змінного струму

абв

.

Будь-який символ, крім розриву рядка

.*

що завгодно, чоловіче.

\ .

Крапка (спеціальний символ: має бути екранований символом \)

а\.с

змінного струму

\

Екранує спеціальний символ

\.\*\+\? \$\^\/\\

.*+? $^/\

\

Екранує спеціальний символ

\[\{\(\)\}\]

[{()}]

Логіка

Логіка

Легенда

Приклад

Зразок збігу

|

Операнд чергування / АБО

22|33

33

(…)

Група захоплення

Яблуко

Яблуко (отримує слово "яблуко")

\1

Зміст Групи 1

r(\w)g\1x

регулярний вираз

\2

Зміст Групи 2

(\d\d)\+(\d\d)=\2\+\1

12+65=65+12

(?: … )

Група, що не захоплює

A(?:nt|pple)

Яблуко

Більше білого простору

Персонаж

Легенда

Приклад

Зразок збігу

\t

Вкладка

Т\т\в{2}

Вкладка

\r

Символ повернення каретки

див. нижче

\n

Символ переведення рядка

див. нижче

\r\n

Роздільник рядків у Windows

AB\r\nCD

АБ
Компакт-диск

Perl, PCRE (C, PHP, R…): один символ, який не є розривом рядка

\N+

Абетка

\h

Perl, PCRE (C, PHP, R…), Java: один горизонтальний пробіл: табуляція або роздільник пробілів Unicode

\H

Один символ, який не є горизонтальним пробілом

\v

.NET, JavaScript, Python, Ruby: вертикальна вкладка

\v

Perl, PCRE (C, PHP, R…), Java: один вертикальний пробіл: переведення рядка, повернення каретки, вертикальна табуляція, переведення форми, роздільник абзаців або рядків

Perl, PCRE (C, PHP, R…), Java: будь-який символ, що не є вертикальним пробілом

\R

Perl, PCRE (C, PHP, R…), Java: один розрив рядка (пара символів повернення каретки + переведення рядка та всі символи, що відповідають \v)

Більше квантифікаторів

Квантор

Легенда

Приклад

Зразок збігу

+

+ (один або декілька) означає «жадібний»

\d+

12345

?

Робить квантифікатори "лінивими"

\d+?

1 в 1 2345

*

* (нуль або більше) означає «жадібний»

А*

ААА

?

Робить квантифікатори "лінивими"

А*?

порожній в AAA

{2,4}

Два-чотири рази «жадібний»

\w{2,4}

абвкд

?

Робить квантифікатори "лінивими"

\w{2,4}?

ab в ab cd

Класи персонажів

Персонаж

Легенда

Приклад

Зразок збігу

[…]

Один із символів у дужках

[АЕІОУ]

Одна голосна у верхньому літері

[…]

Один із символів у дужках

Т[ао]п

Натисніть або вгору

-

Індикатор дальності

[аз]

Одна мала літера

[xy]

Один із символів у діапазоні від x до y

[Аризона]+

ЧУДОВИЙ

[…]

Один із символів у дужках

[AB1-5w-z]

Одне з наступного: A, B, 1, 2, 3, 4, 5, w, x, y, z

[xy]

Один із символів у діапазоні від x до y

[ -~]+

Символи в розділі друку таблиці ASCII .

[^x]

Один символ, який не є x

[^az]{3}

А1!

[^xy]

Один із символів не входить до діапазону від x до y

[^ -~]+

Символи, яких немає в розділі друку таблиці ASCII .

[\d\D]

Один символ, який є цифрою або не є цифрою

[\d\D]+

Будь-які символи, вкл.
включаючи нові рядки, яким не відповідає звичайна крапка

[\x41]

Збігається із символом у шістнадцятковій позиції 41 у таблиці ASCII, тобто A

[\x41-\x45]{3}

АБЕ


Якорі та межі

Якір

Легенда

Приклад

Зразок збігу

^

Початок рядка або початок рядка залежно від багаторядкового режиму. (Але коли [^в дужках], це означає «ні»)

^abc .*

abc (початок рядка)

$

Кінець рядка або кінець рядка залежно від багаторядкового режиму. Багато тонкощів, залежних від рушія.

.*? кінець$

це кінець

А

Початок рядка
(всі основні двигуни, крім JS)

\Aabc[\d\D]*

abc (рядок...
...початок)

\z

Самий кінець струни
Недоступно в Python та JS

кінець\z

це...\n... кінець

\Z

Кінець рядка або (крім Python) перед останнім розривом рядка
Недоступно в JS

кінець\Z

це...\n... кінець \n

Початок рядка або кінець попереднього збігу
.NET, Java, PCRE (C, PHP, R…), Perl, Ruby

Межа слова
Більшість двигунів: положення, де лише з одного боку знаходиться літера ASCII, цифра або підкреслення

Боб.*\bcat\b

Боб з'їв кота

Межа слова
.NET, Java, Python 3, Ruby: позиція, де лише одна сторона є літерою, цифрою або символом підкреслення Unicode

Боб.*\b\кішка\b

Боб з'їв кошеня

Без межі слів

c.*\Bcat\B.*

наслідувачі

Ми використовуємо файли cookie для покращення вашого досвіду перегляду та аналізу трафіку сайту. Натискаючи "Прийняти", ви погоджуєтесь на використання нами файлів cookie. Політика конфіденційності