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 — краткое руководство
  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 лучше понять данную функцию.
  Внимание : Обратите внимание: все приведённые ниже примеры записаны в одну строку!



Важно: регулярные выражения в условиях

Обратите внимание: при использовании регулярных выражений в редакторе условий НЕ добавляйте начальную и конечную косую черту.


Проверка e-mail

Обновление (12/2018): поскольку в настоящее время доменные имена могут содержать не только специальные символы, например «ü», но и состоять из более чем 3 символов, например .tech или .company, приведённое ниже регулярное выражение для e-mail проверяет только наличие символов «@» и «.» в введённом адресе электронной почты.

/^.+?@.+?\..+$/

Если требуется проверять по одному адресу в каждой строке в многострочном поле длинного текста:

/^(((\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

Скобки, пробелы и дефисы игнорируются.

Версии «Very precise:» («Очень точно»), приведённые здесь, проверяют первые четыре или пять цифр номера, чтобы убедиться, что это действительные австралийские номера.

Версии «Not very precise:» («Не очень точно») проверяют только первую и вторую цифры, поэтому могут допускать недействительные номера.

Все телефонные номера Австралии (мобильные и стационарные — код региона обязателен)

Очень точно:

/^\(?(?:\+?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 с необязательными двумя десятичными знаками:

/^([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.