Používanie regulárnych výrazov
From LimeSurvey Manual
Regulárne výrazy musia začínať a končiť lomkou ("/"). Dobrú knižnicu regulárnych výrazov nájdete na https://www.regexlib.net/. Tieto vzory takmer vždy fungujú, ak sú obklopené lomkami.
Na otestovanie regulárneho výrazu môžete použiť tento nástroj na testovanie regulárnych výrazov.
Dôležité: Regulárne výrazy v podmienkach
Upozorňujeme, že pri používaní regulárnych výrazov v editore podmienok NEZADÁVAJTE úvodnú ani záverečnú lomku.
Validácia e-mailu
Aktualizácia (12/2018): Keďže doménové mená môžu dnes obsahovať nielen špeciálne znaky ako „ü“, ale aj viac ako 3 znaky v názve domény, napríklad .tech alebo .company, nižšie uvedený regulárny výraz pre e-mail kontroluje iba to, či sa v zadanej e-mailovej adrese nachádzajú znaky „@“ a „.“.
/^.+?@.+?\..+$/
Ak chcete validovať jednu adresu na riadok vo viacriadkovom poli s dlhým textom:
/^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?\n?)+)*)$/
V tomto zastaranom regulárnom výraze je doménové meno obmedzené na 3 znaky, čo nepokrýva všetky dostupné domény:
/^(\w[-._+\w]*\w@\w[-._\w]*\w\.\w{2,3})$/
PSČ
Austrálske PSČ:
/^[0-9]{4}/
Brazílske PSČ
/^[0-9]{2}\.[0-9]{3}-[0-9]{3}$/
Kanadské PSČ
/^[a-zA-Z]\d{1}[a-zA-Z](\-| |)\d{1}[a-zA-Z]\d{1}$/
Americké PSČ
/^[0-9]{5}([- /]?[0-9]{4})?$/
Ak má PSČ začínať nulou, použite:
/^[0-9]{5}(?:-[0-9]{4})?$/
Britské PSČ
/^[A-Z][A-Z]?[0-9][A-Z0-9]? ?[0-9][ABDEFGHJLNPQRSTUWXYZ]{2}$/i
Upozorňujeme, že tento výraz nie je veľmi presný a presnejšia validácia je oveľa zložitejšia. Ďalšie informácie nájdete napríklad v odpovedi na StackOverflow a na Wikipédii.
Francúzske PSČ
/(^[0-8]\d\d{3}$)|(^9[0-5]\d{3}$)|(^97[1-6]\d{2}$)|(^98[46-8]\d{2}$)/
Vyššie uvedený výraz je veľmi presný a skontroluje, či francúzsky departement existuje (prvé dve číslice), vrátane zámorských departementov a zámorských území (DOM-TOM).
Telefónne čísla
Americké telefónne čísla
/^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$/
alebo
/^[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{4}[\(\)\.\- ]{0,}$/
Táto druhá možnosť zodpovedá všetkým kanadským a americkým telefónnym číslam, ktoré obsahujú nečíselné symboly, vrátane:
. ( ) - (space)
Umožní vám to zodpovedať telefónnym číslam, ktoré vyzerajú takto:
- (555)555 5555
- 555.555.5555
- 555 555 5555
- (555)-555-5555
- 555-555-5555
- 555555555
Austrálske telefónne čísla
Nasledujúce vzory zodpovedajú všetkým rôznym austrálskym číslam mobilných telefónov a pevných liniek, vrátane čísel s predvoľbou krajiny „+61“:
- (02) 9123 6535
- 03 1234-5345
- 0412 345 678
- +61 2 3456 789
Ale nie:
- 234 3450 234
- a234 534 3432
- 134567
- 123456789013
Zátvorky, medzery a spojovníky sa ignorujú.
Verzie označené „Veľmi presné:“ uvedené tu kontrolujú prvé štyri alebo päť číslic v čísle, aby sa zabezpečilo, že ide o platné austrálske čísla.
Verzie označené „Menej presné:“ kontrolujú iba prvú a druhú číslicu, preto môžu povoliť neplatné čísla.
Všetky austrálske telefónne čísla (mobilné aj pevné linky - predvoľba je povinná)
Veľmi presné:
/^\(?(?:\+?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})$/
Menej presné:
/^(?:\+?61|0)[2-478](?:[ -]?[0-9]){8}$/
Všetky austrálske telefónne čísla (iba pevné linky - predvoľba je povinná)
Veľmi presné:
/^\(?(?:\+?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}$/
Menej presné:
/^(?:\+?61|\(?0)[2378]\)?(?:[ -]?[0-9]){8}$/
Telefónne čísla pevných liniek v Novom Južnom Walese (predvoľba je voliteľná)
Veľmi presné:
/^(?:\(?(?:\+?61|0)2\)?[ -]?)?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])(?:[ -]?[0-9]){6}$/
Menej presné:
/^(?:\(?(?:\+?61|0)2\)?(?:[ -]?[0-9]){7}[0-9]$/
Telefónne čísla pevných liniek vo Victorii a na Tasmánii (predvoľba je voliteľná)
Veľmi presné:
/^(?:\(?(?:\+?61|0)3\)?[ -]?)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])(?:[ -]?[0-9]){6}$/
Menej presné:
/^(?:\(?(?:\+?61|0)3\)?(?:[ -]?[0-9]){7}[0-9]$/
Telefónne čísla pevných liniek v Queenslande (predvoľba je voliteľná)
Veľmi presné:
/^(?:\(?(?:\+?61|0)7\)?[ -]?)?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)(?:[ -]?[0-9]){6}$/
Menej presné:
/^(?:\(?(?:\+?61|0)7\)?(?:[ -]?[0-9]){7}[0-9]$/
Telefónne čísla pevných liniek v Južnej Austrálii, Severnom teritóriu a Západnej Austrálii (predvoľba je voliteľná)
Veľmi presné:
/^(?:\(?(?:\+?61|0)8\)?[ -]?)?(?:5[1-4]|6[0-8]|[7-9][0-9])$/
Menej presné:
/^(?:\(?(?:\+?61|0)8\)?(?:[ -]?[0-9]){7}[0-9]$/
Iba austrálske mobilné telefónne čísla
Veľmi presné:
/^(?:\+?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}$/
Menej presné:
/^(?:\(?(?:\+?61|0)4\)?(?:[ -]?[0-9]){7}[0-9]$/
Belgické telefónne číslo
/^((\+|00)32\s?|0)(\d\s?\d{3}|\d{2}\s?\d{2})(\s?\d{2}){2}$/
Belgické mobilné telefónne číslo
/^((\+|00)32\s?|0)4(60|[789]\d)(\s?\d{2}){3}$/
Francúzske telefónne číslo
/^((\+|00)33\s?|0)[1-59](\s?\d{2}){4}$/
Francúzske mobilné telefónne číslo
/^((\+|00)33\s?|0)[67](\s?\d{2}){4}$/
Luxemburské telefónne číslo
/^((\+|00\s?)352)?(\s?\d{2}){3,4}$/
Luxemburské mobilné telefónne číslo
/^((\+|00\s?)352)?\s?6[269]1(\s?\d{3}){2}$/
Nemecké známky (s voliteľným plusom alebo mínusom)
/^[1-6]{1}[\+|\-]?$/
Validácia veku
Príklad: vek 20 – 99
/([2-9][0-9])/
Príklad: vek 18 – 35
/(1[8-9]|2[0-9]|3[0-5])/
Príklad: vek 19 – 65
/^(1[8-9]|[2-5][0-9]|6[0-5])$/
Validácia čísel
Čísla od 1 do 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
Čísla od 1 do 999, od 1.000 do 999.999 až 999.999.999
/^[1-9][0-9]{0,2}(?:\.[0-9]{3}){0,2}$/
Prijíma čísla od 1 do 999, od 1.000 do 999.999 až 999.999.999, ale zamieta čísla ako 999.1.1 , 94.22.22, 999.1.22, 999.11.1, 999.1.333
Validácia čísla s voliteľnou desatinnou časťou (pre cenu)
Prijíma čísla od 0 do 199 s voliteľnými 2 desatinnými miestami:
/^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9])?$/
Validácia čísla s oddeľovačom tisícov
Medzera ako oddeľovač, bez znamienka mínus
/^(?!0)\d{1,3}(\ \d{3})*$/
Bodka ako oddeľovač, znamienko mínus povolené
/^-?(?!0)\d{1,3}(\.\d{3})*$/
Vynucuje dve desatinné miesta a prijíma čísla od 1.00 do 999,999,999.00 s voliteľnou čiarkou oddeľujúcou tisíce/milióny, vrátane všetkých nasledujúcich: 1.00, 1,000.00, 12,345.67, 12345,02, 123,456,468.00, 1234566.00, 123456789.00, ale nie 1,23.00, 12,3.4 alebo 1234,43.04
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
Podobné ako vyššie: vynucuje dve desatinné miesta, ale prijíma „0“ pred oddeľovačom desatinných miest „,“.
/[0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
Rovnako ako vyššie, ale dve desatinné miesta sú voliteľné:
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}(?:\.[0-9]{2})?$/
Mesiac (1-12)
Ak sa chcete opýtať na mesiac narodenia osoby, môžete vstup overiť takto:
/^[0]*[1-9]$|^[0]*1[0-2]$/
Minimálna šírka (v tomto príklade nastavená na 3)
/^.{3,}$/
Mena
Americká mena (znak dolára a centy sú voliteľné)
/^\$?\d+(\.(\d{2}))?$/
Kontrola používania čiarky:
/^\$?\d{1,3}(\d+(?!,))?(,\d{3})*(\.\d{2})?$/
Švajčiarska cena
Číslo s dvoma desatinnými miestami za desatinnou bodkou, pričom posledné z nich je buď 5, alebo 0:
/^(\d+)(\.\d(05)?)?$/
Validácia skóre
1-10
/^[1-9]{1}$|^10$/
1-100
/^[1-9]?[0-9]{1}$|^100$/
Validácia textu
Typ otázky Viacnásobný krátky text momentálne nepodporuje minimálny ani maximálny počet odpovedí. Jedným z riešení je použiť typ otázky Dlhý text s regulárnym výrazom.
Nasledujúci výraz testuje aspoň jedno slovo na riadok pre minimálne 3 a maximálne 10 riadkov:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){2,10}/is
Ak chcete napríklad päť slov na riadok, môžete zmeniť prvú a poslednú hviezdičku na {4,}:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})){2,10}/is
Ak chcete jedno alebo viac slov na riadok (medzi riadkom 1 a riadkom 5), môžete obsah v poslednej dvojici zložených zátvoriek zmeniť na 0,4 (všimnite si, že používate 0, pretože prvý riadok sa už zhoduje).
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){0,4}/is
Počet slov
Nasledujúci výraz obmedzuje počet povolených slov na minimum 1 a maximum 200:
/^[-\w]+(?:\W+[-\w]+){0,199}\W*$/
Ak chcete zvýšiť minimum, zmeňte nulovú časť v {0,199}.
Ak chcete zvýšiť alebo znížiť maximum, zmeňte časť „199“ v {0,199}.
Validácia času
Formáty času možno zapísať viacerými spôsobmi. Medzi možnosti patrí 12-hodinový alebo 24-hodinový formát, so sekundami alebo bez nich. Hoci je možné použiť typ otázky Dátum (dokáže zachytiť aj čas), môžete použiť typ otázky Krátky text s jedným z nižšie uvedených regulárnych výrazov na validáciu.
Nasledujúce tri reťazce na validáciu testujú 24-hodinový čas (v uvedenom poradí) bez sekúnd, s voliteľnými sekundami a nakoniec s povinnými sekundami:
/^(?:[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]$/
Nasledujúce tri sa zhodujú s 12-hodinovým časom, rovnako ako vyššie: so sekundami, s voliteľnými sekundami a s povinnými sekundami:
/^(?">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))$/
Nasledujúce tri sa zhodujú s 12-hodinovým alebo 24-hodinovým časom, rovnako ako vyššie: so sekundami, s voliteľnými sekundami a s povinnými sekundami:
/^(?:(?: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])$/
Štáty USA
Na overenie jedného štátu použite nasledujúci výraz (príklad je pre Texas):
- TX iba veľké písmená:
/^(TX)$/
- tx iba malé písmená:
/^(tx)$/
- TX veľké alebo malé písmená:
/^([T|t][X|x])$/
Filter vulgarizmov
Ak chcete z odpovede odfiltrovať vulgárne slová:
/^(?i)((?!\bENTERPROFANITYHERE\b).)*$(?-i)/
Nahraďte "ENTERPROFANITYHERE" svojím nevhodným slovom.
Znak \b umožní prejsť slovám ako "assassination" a "hello", ak ako vulgárne slovo zadáte "ass" alebo "hell". Funguje to aj vtedy, ak chcete z odpovedí vylúčiť iné slová, mená a podobne.
Užitočné odkazy
Na začiatku tejto wiki sekcie odporúčame na testovanie a vytváranie regulárnych výrazov použiť https://regex101.com/. Ak vám prvá možnosť nevyhovuje, môžete na vytváranie výrazov použiť aj https://www.regextester.com/. Na vizualizáciu regulárnych výrazov môžete použiť https://extendsclass.com/regex-tester.html.