Използване на регулярни изрази
From LimeSurvey Manual
Регулярните изрази трябва да започват и завършват с наклонена черта ("/"). Можете да намерите добра библиотека от регулярни изрази на http://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})?$/
Пощенски кодове в Обединеното кралство
/^[AZ][AZ]?[0-9][A-Z0-9]? ?[0-9][ABDEFGHJLNPQRSTUWXYZ]{2}$/i
Имайте предвид, че това не е много точно и по-точното валидиране е много по-сложно. Например вижте StackOverflow отговор и Wikipedia за повече информация.
Френски пощенски кодове
/(^[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,}$/
Тази втора опция ще съответства на всички телефонни номера в Канада и САЩ, които включват нецифрени символи, включително:
. ( ) - (интервал)
Това ще ви позволи да съпоставите телефонни номера, които приличат на по-долу:
- (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}$/ прави същото като по-горе, но трябва да работи малко по-бързо
Числа от 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, 1000,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}/е
Ако искате, кажете пет думи на ред, можете да промените първата и последната звездичка на {4,}:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})(?:[,.; :?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})){2,10}/е
Ако искате една или повече думи на ред (между ред 1 и ред 5), можете да промените съдържанието, намиращо се в последните фигурни скоби, на 0,4 (обърнете внимание, че използвате 0, защото вече намирате съответствие първият ред).
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?! & \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^, .;:?!& \n\r]+)*)){0,4}/е
Брой на думите
Следното ограничава броя на разрешените думи до минимум 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] (?:сутрин|сутрин)|(?: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] (?:сутрин|сутрин)|(?: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] (?:сутрин|сутрин)|(?: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|сутрин)|(?: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] (?:сутрин|сутрин)|(?: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)/
Заменете „ENTERFANITYHERE“ с вашата лоша дума.
\b ще позволи предаването на думи като "убийство" и "здравей", ако въведете "задник" или "ад" като нецензурна дума. Това също работи, ако се опитвате да пропуснете други думи, имена и т.н. от отговорите.
Полезни връзки
В началото на този wiki раздел ви препоръчваме да използвате https://regex101.com/ за тестване/създаване на регулярни изрази. Можете също да използвате https://www.regextester.com/ за създаване на изрази, в случай че не сте доволни от първата опция. Можете да използвате https://extendsclass.com/regex-tester.html за визуализиране на регулярни изрази.