x

Основні розділи

  1. LimeSurvey Cloud проти LimeSurvey CE
  2. Короткий посібник із початку роботи - LimeSurvey 3.0+
  3. Встановлення - LimeSurvey CE
  4. Як створити хороше опитування (посібник)
  5. Початок роботи
  6. Адміністрування LimeSurvey
  7. Опитування - вступ
  8. Налаштування опитування
  9. Меню опитування
  10. Структура опитування
  11. Питання - вступ
  12. Групи питань - вступ
  13. Опитування - керування
  14. Параметри панелі інструментів опитування
  15. Багатомовне опитування
  16. ExpressionScript Engine - Короткий посібник
  17. Некатегоризовані та розширені функції
  18. Загальні поширені запитання
  19. Усунення несправностей
  20. Обхідні рішення
  21. Ліцензія
  22. Журнал змін версій
  23. Плагіни
 Actions

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

From LimeSurvey Manual

Ця сторінка, можливо, перекладена машинним способом і може містити помилки. Показати англійський оригінал · Покращити цей переклад
This page is a translated version of the page Using regular expressions and the translation is 100% complete.

Регулярні вирази мають починатися і закінчуватися похилою рискою ("/"). Хорошу бібліотеку регулярних виразів можна знайти на https://www.regexlib.net/. Ці шаблони майже завжди працюватимуть, якщо їх обрамити похилими рисками.

Щоб протестувати свій регулярний вираз, можна скористатися цим тестером регулярних виразів.

Щоб покращити цей розділ вікі, просимо вас додавати свої успішно протестовані регулярні вирази, щоб допомогти новим (потенційним) користувачам LimeSurvey краще зрозуміти цю функцію.
  Увага : Зверніть увагу, що всі наведені нижче приклади записані в один рядок!



Важливо: регулярні вирази в умовах

Зверніть увагу: використовуючи регулярні вирази в редакторі умов, НЕ додавайте початкову та кінцеву похилу риску.


Перевірка електронної адреси

Оновлення (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.