Actions

Използване на регулярни изрази

From LimeSurvey Manual

This page is a translated version of the page Using regular expressions and the translation is 100% complete.

Регулярните изрази трябва да започват и завършват с наклонена черта ("/"). Можете да намерите добра библиотека от регулярни изрази на http://www.regexlib.net/. Тези модели почти винаги ще работят, ако са заобиколени от наклонени черти.

За да тествате своя регулярен израз, можете да използвате този тестер за регулярен израз.

Template:Забележка

  Внимание : Моля, обърнете внимание, че всички примери по-долу са написани на един ред!



Важно: Регулярни изрази в условия

Имайте предвид, че когато използвате регулярни изрази в редактора на условия, НЕ включвайте началната и крайната наклонена черта.


Потвърждение на имейл

Актуализация (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 за визуализиране на регулярни изрази.