Використання регулярних виразів
From LimeSurvey Manual
Регулярні вирази мають починатися і закінчуватися похилою рискою ("/"). Хорошу бібліотеку регулярних виразів можна знайти на https://www.regexlib.net/. Ці шаблони майже завжди працюватимуть, якщо їх обрамити похилими рисками.
Щоб протестувати свій регулярний вираз, можна скористатися цим тестером регулярних виразів.
Важливо: регулярні вирази в умовах
Зверніть увагу: використовуючи регулярні вирази в редакторі умов, НЕ додавайте початкову та кінцеву похилу риску.
Перевірка електронної адреси
Оновлення (12/2018): оскільки нині доменні імена можуть містити не лише спеціальні символи, як-от «ü», а й складатися з більш ніж 3 символів, наприклад .tech або .company, наведений нижче регулярний вираз для електронної адреси лише перевіряє, чи містяться «@» та «.» у введеній адресі.
/^.+?@.+?\..+$/
Якщо потрібно перевірити по одній адресі в рядку в багаторядковому полі Довгий текст:
/^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?\n?)+)*)$/
У цьому застарілому регулярному виразі доменне ім'я обмежене 3 символами, що не охоплює всі наявні домени:
/^(\w[-._+\w]*\w@\w[-._\w]*\w\.\w{2,3})$/
Поштові індекси
Австралійські поштові індекси:
/^[0-9]{4}/
Бразильські поштові індекси
/^[0-9]{2}\.[0-9]{3}-[0-9]{3}$/
Канадські поштові індекси
/^[a-zA-Z]\d{1}[a-zA-Z](\-| |)\d{1}[a-zA-Z]\d{1}$/
Поштові індекси США
/^[0-9]{5}([- /]?[0-9]{4})?$/
Щоб поштовий індекс міг починатися з нуля, використовуйте:
/^[0-9]{5}(?:-[0-9]{4})?$/
Поштові індекси Великої Британії
/^[A-Z][A-Z]?[0-9][A-Z0-9]? ?[0-9][ABDEFGHJLNPQRSTUWXYZ]{2}$/i
Зверніть увагу, що цей вираз не дуже точний, а точніша перевірка значно складніша. Додаткову інформацію дивіться, наприклад, у відповіді на StackOverflow та на Вікіпедії.
Французькі поштові індекси
/(^[0-8]\d\d{3}$)|(^9[0-5]\d{3}$)|(^97[1-6]\d{2}$)|(^98[46-8]\d{2}$)/
Наведений вище вираз дуже точний і перевіряє, чи існує французький департамент (перші дві цифри), включно із заморськими департаментами та заморськими територіями (DOM-TOM).
Номери телефонів
Номери телефонів США
/^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$/
або
/^[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{4}[\(\)\.\- ]{0,}$/
Цей другий варіант відповідає всім канадським і американським номерам телефонів, що містять нецифрові символи, зокрема:
. ( ) - (space)
Це дозволить знаходити номери телефонів, схожі на наведені нижче:
- (555)555 5555
- 555.555.5555
- 555 555 5555
- (555)-555-5555
- 555-555-5555
- 555555555
Австралійські номери телефонів
Наведені нижче шаблони відповідають усім різновидам австралійських номерів мобільних і стаціонарних телефонів, зокрема з міжнародним префіксом «+61»:
- (02) 9123 6535
- 03 1234-5345
- 0412 345 678
- +61 2 3456 789
Але не:
- 234 3450 234
- a234 534 3432
- 134567
- 123456789013
Дужки, пробіли та дефіси ігноруються.
Варіанти з позначкою «Дуже точно:», наведені тут, перевіряють перші чотири або п’ять цифр номера, щоб переконатися, що це дійсні австралійські номери.
Варіанти з позначкою «Не дуже точно:» перевіряють лише першу та другу цифри, тому можуть допускати недійсні номери.
Усі австралійські номери телефонів (мобільні та стаціонарні - код міста обов’язковий)
Дуже точно:
/^\(?(?:\+?61|0)(?:(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9][ -]?[0-9]))(?:[ -]?[0-9]){6}|4\)?[ -]?(?:(?:[01][ -]?[0-9]|2[ -]?[0-57-9]|3[ -]?[1-9]|4[ -]?[7-9]|5[ -]?[018])[ -]?[0-9]|3[ -]?0[ -]?[0-5])(?:[ -]?[0-9]){5})$/
Не дуже точно:
/^(?:\+?61|0)[2-478](?:[ -]?[0-9]){8}$/
Усі австралійські номери телефонів (лише стаціонарні - код міста обов’язковий)
Дуже точно:
/^\(?(?:\+?61|0)(?:2\)?[ -]?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])|3\)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])|7\)?[ -]?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)|8\)?[ -]?(?:5[ -]?[1-4]|6[ -]?[0-8]|[7-9][ -]?[0-9]))(?:[ -]?[0-9]){6}$/
Не дуже точно:
/^(?:\+?61|\(?0)[2378]\)?(?:[ -]?[0-9]){8}$/
Стаціонарні номери телефонів Нового Південного Уельсу (код міста необов’язковий)
Дуже точно:
/^(?:\(?(?:\+?61|0)2\)?[ -]?)?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])(?:[ -]?[0-9]){6}$/
Не дуже точно:
/^(?:\(?(?:\+?61|0)2\)?(?:[ -]?[0-9]){7}[0-9]$/
Стаціонарні номери телефонів штатів Вікторія та Тасманія (код міста необов’язковий)
Дуже точно:
/^(?:\(?(?:\+?61|0)3\)?[ -]?)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])(?:[ -]?[0-9]){6}$/
Не дуже точно:
/^(?:\(?(?:\+?61|0)3\)?(?:[ -]?[0-9]){7}[0-9]$/
Стаціонарні номери телефонів Квінсленду (код міста необов’язковий)
Дуже точно:
/^(?:\(?(?:\+?61|0)7\)?[ -]?)?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)(?:[ -]?[0-9]){6}$/
Не дуже точно:
/^(?:\(?(?:\+?61|0)7\)?(?:[ -]?[0-9]){7}[0-9]$/
Стаціонарні номери телефонів Південної Австралії, Північної території та Західної Австралії (код міста необов’язковий)
Дуже точно:
/^(?:\(?(?:\+?61|0)8\)?[ -]?)?(?:5[1-4]|6[0-8]|[7-9][0-9])$/
Не дуже точно:
/^(?:\(?(?:\+?61|0)8\)?(?:[ -]?[0-9]){7}[0-9]$/
Лише австралійські мобільні номери телефонів
Дуже точно:
/^(?:\+?61|0)4 ?(?:(?:[01] ?[0-9]|2 ?[0-57-9]|3 ?[1-9]|4 ?[7-9]|5 ?[018]) ?[0-9]|3 ?0 ?[0-5])(?: ?[0-9]){5}$/
Не дуже точно:
/^(?:\(?(?:\+?61|0)4\)?(?:[ -]?[0-9]){7}[0-9]$/
Бельгійський номер телефону
/^((\+|00)32\s?|0)(\d\s?\d{3}|\d{2}\s?\d{2})(\s?\d{2}){2}$/
Бельгійський мобільний номер телефону
/^((\+|00)32\s?|0)4(60|[789]\d)(\s?\d{2}){3}$/
Французький номер телефону
/^((\+|00)33\s?|0)[1-59](\s?\d{2}){4}$/
Французький мобільний номер телефону
/^((\+|00)33\s?|0)[67](\s?\d{2}){4}$/
Люксембурзький номер телефону
/^((\+|00\s?)352)?(\s?\d{2}){3,4}$/
Люксембурзький мобільний номер телефону
/^((\+|00\s?)352)?\s?6[269]1(\s?\d{3}){2}$/
Німецькі оцінки (з необов’язковим плюсом або мінусом)
/^[1-6]{1}[\+|\-]?$/
Перевірка віку
Приклад: вік 20-99
/([2-9][0-9])/
Приклад: вік 18-35
/(1[8-9]|2[0-9]|3[0-5])/
Приклад: вік 19-65
/^(1[8-9]|[2-5][0-9]|6[0-5])$/
Перевірка чисел
Числа від 1 до 99999
/^([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9])$/
/^[1-9][0-9]{0,4}$/ does the same as above but should run a little faster
Числа від 1 до 999, від 1.000 до 999.999 і до 999.999.999
/^[1-9][0-9]{0,2}(?:\.[0-9]{3}){0,2}$/
Приймає числа від 1 до 999, від 1.000 до 999.999 і до 999.999.999, але відхиляє числа на кшталт 999.1.1 , 94.22.22, 999.1.22, 999.11.1, 999.1.333
Перевірка числа з необов’язковою десятковою частиною (для ціни)
Приймає числа від 0 до 199 з необов’язковими 2 десятковими знаками:
/^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9])?$/
Перевірка числа з роздільником тисяч
Пропуск як роздільник, без мінуса
/^(?!0)\d{1,3}(\ \d{3})*$/
Крапка як роздільник, мінус дозволено
/^-?(?!0)\d{1,3}(\.\d{3})*$/
Він примусово вимагає два десяткові знаки та приймає числа від 1.00 до 999,999,999.00 з необов’язковою комою як роздільником тисяч/мільйонів, включно з усіма наведеними: 1.00, 1,000.00, 12,345.67, 12345,02, 123,456,468.00, 1234566.00, 123456789.00, але не 1,23.00, 12,3.4 або 1234,43.04
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
Подібно до попереднього: вимагає два десяткові знаки, але приймає «0» перед десятковим роздільником «,».
/[0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
Те саме, що й вище, але два десяткові знаки необов’язкові:
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}(?:\.[0-9]{2})?$/
Місяць (1-12)
Якщо ви хочете запитати, в якому місяці народилася особа, можна перевірити введені дані так:
/^[0]*[1-9]$|^[0]*1[0-2]$/
Мінімальна довжина (у цьому прикладі встановлено 3)
/^.{3,}$/
Валюта
Валюта США (знак долара та центи необов’язкові)
/^\$?\d+(\.(\d{2}))?$/
Перевірка використання коми:
/^\$?\d{1,3}(\d+(?!,))?(,\d{3})*(\.\d{2})?$/
Швейцарська ціна
Число з двома десятковими знаками після крапки, останній з яких — 5 або 0:
/^(\d+)(\.\d(05)?)?$/
Перевірка оцінки
1-10
/^[1-9]{1}$|^10$/
1-100
/^[1-9]?[0-9]{1}$|^100$/
Перевірка тексту
Тип питання «Кілька коротких текстів» наразі не підтримує мінімальну чи максимальну кількість відповідей. Один зі способів обійти це — використати тип питання «Довгий довільний текст» з регулярним виразом.
Наведений нижче вираз перевіряє наявність щонайменше одного слова в рядку, щонайменше 3 рядки та не більше 10 рядків:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){2,10}/is
Якщо вам потрібно, скажімо, п’ять слів у рядку, можна замінити першу й останню зірочку на {4,}:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})){2,10}/is
Якщо вам потрібне одне або більше слів у рядку (між рядком 1 і рядком 5), можна змінити вміст в останніх фігурних дужках на 0,4 (зверніть увагу: використовується 0, оскільки перший рядок уже враховано).
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){0,4}/is
Кількість слів
Наведений нижче вираз обмежує кількість дозволених слів: мінімум 1 і максимум 200:
/^[-\w]+(?:\W+[-\w]+){0,199}\W*$/
Щоб збільшити мінімум, змініть нульову частину в {0,199}.
Щоб збільшити або зменшити максимум, змініть частину «199» у {0,199}.
Перевірка часу
Існує багато способів запису формату часу. Серед можливих варіантів — 12-годинний або 24-годинний формат, із секундами або без. Хоча можна використати тип питання «Дата» (він також може зберігати час), ви можете використати тип питання «Короткий довільний текст» з одним із наведених нижче регулярних виразів для перевірки.
Наведені нижче три рядки перевірки призначені для 24-годинного часу (у порядку появи): без секунд, з необов’язковими секундами та з обов’язковими секундами:
/^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9])?$/
/^(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/
Наведені нижче три вирази відповідають 12-годинному часу, як і вище: із секундами, з необов’язковими секундами та з обов’язковими секундами:
/^(?">00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))$/
/^(?:00:[0-5][0-9](?::[0-5][0-9])? (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9](?::[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0-5][0-9](?::[0-5][0-9])? (?:pm|PM))$/
/^(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9]:[0-5][0-9] (?:pm|PM))$/
Наведені нижче три вирази відповідають 12- або 24-годинному часу, як і вище: із секундами, з необов’язковими секундами та з обов’язковими секундами:
/^(?:(?:00:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9] (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9])$/
/^(?:(?:00:[0-5][0-9](?[0-5][0-9])? (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9](?[0-5][0-9])? (?:[ap]m|[AP]M)|12:[0-5][0-9](?[0-5][0-9])? (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9](?[0-5][0-9])?)$/
/^(?:(?:00:[0-5][0-9]:[0-5][0-9] (?:am|AM)|(?:0[1-9]|1[01]):[0-5][0-9]:[0-5][0-9] (?:[ap]m|[AP]M)|12:[0-5][0-9]:[0-5][0-9] (?:pm|PM))|(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])$/
Штати США
Щоб перевірити один штат, скористайтеся наведеним нижче прикладом (для Техасу):
- TX лише верхній регістр:
/^(TX)$/
- tx лише нижній регістр:
/^(tx)$/
- TX у верхньому або нижньому регістрі:
/^([T|t][X|x])$/
Фільтр нецензурної лексики
Щоб відфільтрувати нецензурні слова у відповіді:
/^(?i)((?!\bENTERPROFANITYHERE\b).)*$(?-i)/
Замініть "ENTERPROFANITYHERE" на своє небажане слово.
Символ \b дозволить пропускати такі слова, як "assassination" і "hello", якщо як нецензурне слово ви вкажете "ass" або "hell". Це також працює, якщо ви хочете виключити з відповідей інші слова, імена тощо.
Корисні посилання
На початку цього розділу вікі ми радимо використовувати https://regex101.com/ для тестування/створення регулярних виразів. Ви також можете скористатися https://www.regextester.com/ для створення виразів, якщо перший варіант вам не підходить. Для візуалізації регулярних виразів можна використати https://extendsclass.com/regex-tester.html.