Використовуються для пошуку та перевірки даних у тексті.
Перевірка або пошук здійснюється за допомогою складання шаблонів та знаходження відповідності до цього шаблону.
При побудові таких шаблонів використовують спеціальні символи.
Ці символи відповідають наступним виразам:
будь-який символ
не цифра
не буква
Проміжок від і до
І ці спеціальні символи та правила їх застосування становлять мову регулярних виразів.
За допомогою якого рядки можна обробляти – перевіряти, розділяти, замінювати тощо.
У більшості мов програмування існує підтримка регулярних виразів.
У термінах регулярних виразів часто використовуються слова “шаблон” чи “маска”.
Шаблон регулярного вираження у JavaScript можна створити двома способами - літералом та конструктором.
Літерал є виразом виду
"/шаблон/прапори"
Цей вираз може бути наданий змінною.
var template1 = /\D/
Створення з допомогою конструктора.
var mask = new RegExp("шаблон", "прапори")
У такому разі і шаблон, і прапори беруться у лапки.
Вираз, створений конструктором, можна змінювати по ходу виконання програми.
Основні засоби використання.
перевірка рядка на відповідність шаблону;
поділ рядка на частини за шаблоном;
Перетворення рядка за шаблоном.
Перевірка здійснюється методом test(str). Аргументом передається рядок, який потрібно перевірити.
Приклад.
template = /1/
template.test("123")
template.test("234")
template.test("I am 21 years old")
Наведемо список деяких спеціальних символів.
\d Будь-яка цифра
\s Пробіловий символ (пробіл, табуляція, розрив рядка)
\w Символ, допустимий у слові (англ. word-symbol): велика або маленька літера, а також цифри або підкреслення
. (точка) Будь-який символ (крім розриву рядка)
\DЧи не цифра
\S Не символ пробілу
Наприклад, використаний нами як сам перший приклад шаблон /\D/ означає наявність знака “\D” у рядку, а цей знак означає не цифра.
Позначають набір символів.
У цих дужках перераховуються символи, що входять до бажаного набору. Причому наявність пробілу чи коми всередині дужок буде вважатися, що символ пробілу або комою також входить до набору.
Символи з набору перевіряються за правилом «АБО»
template = /[12]/
Цей приклад перевірить рядок на наявність символів 1 або 2.
Можна вказати інтервал:
[1-4] символи (цифри) від 1 до 4
[a-z] символи (літери) від "a" до "z" (маленькі)
[A-Z] символи (літери) від «A» до «Z» (великі)
[г-ж] символи (літери) від «г» до «ж»
[0-9A-F] шістнадцяткові цифри 0123456789ABCDEF
Завдання:
** Відкрити консоль та перевірити рядок на наявність email, ip адреси **
Ми можемо вказати НЕДОПУСНІСТЬ символів за допомогою кришки ^.
template = /[^123]/
Для вказівки кількості символів, що йдуть поспіль, або їх набору використовуються квантифікарори (модифікатори).
? 0 або 1 раз
+ 1 і більше разів
* 0 і більше разів
{2} рівно 2 повтори (число довільне)
{2,} 2 і більше повторів (число довільне)
{2,7} від 2 до 7 повторів (числа довільні)
\d{7} означає «сім цифр поспіль»,
** Відкрити консоль та перевірити рядок на наявність номера телефону **
https? - дозволяє http і https
Квантифікатор “?” відноситься лише до найближчого символу.
Вказують на певне місце у рядку.
^ - початок рядка
$ - кінець рядка.
Часто використовуються для створення маршрутів (масок URL адрес)
Наприклад, якщо потрібно переконатися, що рядок url починається з символу слова user, то застосуємо шаблон template = /^user/
Увага! Символ має двояке значення в залежності від того де застосовується.
Якщо він стоїть на початку групи “[^…]”, то він “забороняє” символи означаючи НЕ або КРІМ.
Самостійно скласти вираз “рядок закінчується будь-якою цифрою”.
Для того щоб включати спеціальні символи в шаблони, маючи на увазі самі символи, а не їх спеціальне призначення їх необхідно «екранувати» зворотним слешем.
Список таких символів
^ $ [ ] ( ) { } . * + \ ? < > |\ \
Роботу з регулярними шаблонами забезпечують об’єкти типу RegExp, і об’єкти типу String.
Метод exec, крім перевірки, ще проводить пошук за шаблоном.
Наприклад.
str = "20% of population owning 80% income"
template = /\d+/
template.exec(str)
Поверне об’єкт першого входження.
Для того щоб знайти наступні, застосовуються прапори.
template = /\d+/g
g - Світовий пошук.
За наявності прапора “g” метод “exec” можна викликати кілька разів, отримуючи нові збіги із шаблоном. Якщо збігів немає – поверне null.
Працює схоже на exec тільки результат з прапором g буде різний.
При записі цього методу програмна інструкція як би “перевертається” - метод “match” викликається у рядковій змінній (str), а як аргумент йому передається регулярний шаблон (template):
str.match(template)
З прапором g повертає список входжень.
Замінює рядок у відповідності з регулярним виразом.
str="67-00-53"
str.replace("-","")
Завдання: прибирати рисочки у полі введення при наборі.
Увага! replace прибере лише перше входження, якщо не вказано прапор g.
Прибирати можемо у проміжку.
str = "67 - 00 - 53"
str.replace(/[- ]/g,"")
Завдання: створіть шаблон і перевірте його працездатність для ситуації, коли номер телефону допускається ще й круглі дужки. Для перевірки можете використовувати телефон у форматі “(0512) 67-00-53”.
Розділяє рядок за регулярним виразом.
str.split(",")
Завдання. Використовуючи модифікатор \W розділити рядки
str1 = "Smith John"
str2 = "Smith, John"
Завдання: у полі введення допускається вписувати кілька ip адрес, розділяючи їх комою.
Реєстронезалежний пошук.
template = /yes/i
практика.
Створити форму та повісити функцію перевірки на onsubmit=”return checkForm()”.
Функція при помилці валідації поверне false, запобігши відправленню форми.
правила форми.
Задане правило найпростіше перевіряти «від зворотного» — якщо в рядку є щось, окрім літер, то перевірка вважається не пройденою.
function checkForm(){
var n1 = document.getElementById("name1").value;
var t1 = /[^a-z]/i;
if(t1.test(n1))
alert("First name is incorrect");
return false;
}
Перша буква імені має бути великою.
/^[A-Z][a-z]*$/
function checkForm(){ var n1 = document.getElementById(“name1”).value; var t1 = /^[A-Z][a-z]*$/; if(!t1.test(n1)) alert(“First name is incorrect”); return false; }
Складові імена потрібно перевіряти кожне окремо за шаблоном «Велика літера» далі «маленькі» потім “тире” і знову “Велика”, потім “маленькі”.
/^[A-Z][a-z](-[A-Z][a-z])*$/
Перша літера в них може бути великою і після неї можливий апостроф. O’Brian
/^[A-Za-z]’?[A-Za-z][a-z]*$/