Používání regulárních výrazů
From LimeSurvey Manual
Regulární výrazy musí začínat a končit lomítkem ("/"). Dobrou knihovnu regulárních výrazů najdete na https://www.regexlib.net/. Tyto vzory téměř vždy fungují, pokud jsou obklopeny lomítky.
Pro otestování regulárního výrazu můžete použít tento nástroj pro testování regulárních výrazů.
Důležité: regulární výrazy v podmínkách
Upozorňujeme, že při použití regulárních výrazů v editoru podmínek NEZADÁVEJTE úvodní a koncové lomítko.
Ověření e-mailu
Aktualizace (12/2018): Protože doménová jména dnes mohou obsahovat nejen speciální znaky jako „ü“, ale také více než 3 znaky v doméně, například .tech nebo .company, níže uvedený regulární výraz pro e-mail pouze kontroluje, zda zadaná e-mailová adresa obsahuje „@“ a „.“.
/^.+?@.+?\..+$/
Pokud chcete ověřit jednu adresu na řádek ve víceřádkovém poli typu dlouhý text:
/^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\n)?\n?)+)*)$/
U tohoto zastaralého regulárního výrazu je doménové jméno omezeno na 3 znaky, což nepokrývá všechny dostupné domény:
/^(\w[-._+\w]*\w@\w[-._\w]*\w\.\w{2,3})$/
PSČ
Australská PSČ:
/^[0-9]{4}/
Brazilská 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})?$/
Aby PSČ mohlo začínat nulou, použijte:
/^[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 není příliš přesný a přesnější ověření je mnohem složitější. Další informace naleznete například v odpovědi na StackOverflow a na Wikipedii.
Francouzská PSČ
/(^[0-8]\d\d{3}$)|(^9[0-5]\d{3}$)|(^97[1-6]\d{2}$)|(^98[46-8]\d{2}$)/
Výše uvedený výraz je velmi přesný a zkontroluje, zda francouzský departement existuje (první dvě číslice), včetně zámořských departementů a zámořských území (DOM-TOM).
Telefonní čísla
Americká telefonní čísla
/^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$/
nebo
/^[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{4}[\(\)\.\- ]{0,}$/
Tato druhá možnost odpovídá všem kanadským a americkým telefonním číslům, která obsahují nečíselné symboly, mimo jiné:
. ( ) - (space)
Umožní vám zachytit telefonní čísla podobná těmto:
- (555)555 5555
- 555.555.5555
- 555 555 5555
- (555)-555-5555
- 555-555-5555
- 555555555
Australská telefonní čísla
Následující vzory odpovídají nejrůznějším australským mobilním i pevným telefonním číslům, včetně těch s mezinárodní předvolbou „+61“:
- (02) 9123 6535
- 03 1234-5345
- 0412 345 678
- +61 2 3456 789
Ale ne:
- 234 3450 234
- a234 534 3432
- 134567
- 123456789013
Závorky, mezery a pomlčky se ignorují.
Verze označené „Velmi přesné:“ uvedené zde porovnávají první čtyři nebo pět číslic čísla, aby bylo zajištěno, že jde o platná australská čísla.
Verze označené „Méně přesné:“ porovnávají pouze první a druhou číslici, takže mohou povolit neplatná čísla.
Všechna australská telefonní čísla (mobilní i pevné linky – předvolba je povinná)
Velmi přesné:
/^\(?(?:\+?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})$/
Méně přesné:
/^(?:\+?61|0)[2-478](?:[ -]?[0-9]){8}$/
Všechna australská telefonní čísla (pouze pevné linky – předvolba je povinná)
Velmi přesné:
/^\(?(?:\+?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}$/
Méně přesné:
/^(?:\+?61|\(?0)[2378]\)?(?:[ -]?[0-9]){8}$/
Telefonní čísla pevných linek v Novém Jižním Walesu (předvolba je volitelná)
Velmi přesné:
/^(?:\(?(?:\+?61|0)2\)?[ -]?)?(?:3[ -]?[38]|[46-9][ -]?[0-9]|5[ -]?[0-35-9])(?:[ -]?[0-9]){6}$/
Méně přesné:
/^(?:\(?(?:\+?61|0)2\)?(?:[ -]?[0-9]){7}[0-9]$/
Telefonní čísla pevných linek ve Victorii a Tasmánii (předvolba je volitelná)
Velmi přesné:
/^(?:\(?(?:\+?61|0)3\)?[ -]?)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])(?:[ -]?[0-9]){6}$/
Méně přesné:
/^(?:\(?(?:\+?61|0)3\)?(?:[ -]?[0-9]){7}[0-9]$/
Telefonní čísla pevných linek v Queenslandu (předvolba je volitelná)
Velmi přesné:
/^(?:\(?(?:\+?61|0)7\)?[ -]?)?(?:[2-4][ -]?[0-9]|5[ -]?[2-7]|7[ -]?6)(?:[ -]?[0-9]){6}$/
Méně přesné:
/^(?:\(?(?:\+?61|0)7\)?(?:[ -]?[0-9]){7}[0-9]$/
Telefonní čísla pevných linek v Jižní Austrálii, Severním teritoriu a Západní Austrálii (předvolba je volitelná)
Velmi přesné:
/^(?:\(?(?:\+?61|0)8\)?[ -]?)?(?:5[1-4]|6[0-8]|[7-9][0-9])$/
Méně přesné:
/^(?:\(?(?:\+?61|0)8\)?(?:[ -]?[0-9]){7}[0-9]$/
Pouze australská čísla mobilních telefonů
Velmi přesné:
/^(?:\+?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}$/
Méně přesné:
/^(?:\(?(?:\+?61|0)4\)?(?:[ -]?[0-9]){7}[0-9]$/
Belgické telefonní číslo
/^((\+|00)32\s?|0)(\d\s?\d{3}|\d{2}\s?\d{2})(\s?\d{2}){2}$/
Belgické číslo mobilního telefonu
/^((\+|00)32\s?|0)4(60|[789]\d)(\s?\d{2}){3}$/
Francouzské telefonní číslo
/^((\+|00)33\s?|0)[1-59](\s?\d{2}){4}$/
Francouzské číslo mobilního telefonu
/^((\+|00)33\s?|0)[67](\s?\d{2}){4}$/
Lucemburské telefonní číslo
/^((\+|00\s?)352)?(\s?\d{2}){3,4}$/
Lucemburské číslo mobilního telefonu
/^((\+|00\s?)352)?\s?6[269]1(\s?\d{3}){2}$/
Německé školní známky (s volitelným plusem nebo mínusem)
/^[1-6]{1}[\+|\-]?$/
Ověření věku
Příklad: věk 20–99
/([2-9][0-9])/
Příklad: věk 18–35
/(1[8-9]|2[0-9]|3[0-5])/
Příklad: věk 19–65
/^(1[8-9]|[2-5][0-9]|6[0-5])$/
Ověření čísla
Čí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}$/
Přijímá čísla od 1 do 999, od 1.000 do 999.999 až 999.999.999, ale odmítá čísla jako 999.1.1 , 94.22.22, 999.1.22, 999.11.1, 999.1.333
Ověření čísla s volitelnou desetinnou částí (pro cenu)
Přijímá čísla od 0 do 199 s volitelnými 2 desetinnými místy:
/^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9])?$/
Ověření čísla s oddělovačem tisíců
Mezera jako oddělovač, bez znaménka minus
/^(?!0)\d{1,3}(\ \d{3})*$/
Tečka jako oddělovač, znaménko minus povoleno
/^-?(?!0)\d{1,3}(\.\d{3})*$/
Vynutí dvě desetinná místa a přijímá čísla od 1.00 do 999,999,999.00 s volitelnou čárkou oddělující tisíce/miliony, včetně všech následujících: 1.00, 1,000.00, 12,345.67, 12345,02, 123,456,468.00, 1234566.00, 123456789.00 ale ne 1,23.00, 12,3.4 nebo 1234,43.04
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
Podobné jako výše: vynutí dvě desetinná místa, ale přijímá „0“ před desetinným oddělovačem „,“.
/[0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
Stejné jako výše, ale dvě desetinná místa jsou volitelná:
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}(?:\.[0-9]{2})?$/
Měsíc (1-12)
Pokud se chcete zeptat na měsíc narození, můžete vstup ověřit následujícím způsobem:
/^[0]*[1-9]$|^[0]*1[0-2]$/
Minimální délka (v tomto příkladu nastaveno na 3)
/^.{3,}$/
Měna
Americká měna (znak dolaru a centy jsou volitelné)
/^\$?\d+(\.(\d{2}))?$/
Kontrola použití čárky:
/^\$?\d{1,3}(\d+(?!,))?(,\d{3})*(\.\d{2})?$/
Švýcarská cena
Číslo se dvěma desetinnými místy za desetinnou tečkou, z nichž poslední je buď 5, nebo 0:
/^(\d+)(\.\d(05)?)?$/
Ověření skóre
1-10
/^[1-9]{1}$|^10$/
1-100
/^[1-9]?[0-9]{1}$|^100$/
Ověření textu
Typ otázky Vícenásobné krátké texty v současné době nepodporuje minimum ani maximum odpovědí. Jedním z řešení je použít typ otázky Dlouhý text s regulárním výrazem.
Níže uvedený výraz kontroluje, zda je na řádku alespoň jedno slovo, a to alespoň na 3 řádcích a nejvýše na 10 řádcích:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){2,10}/is
Pokud chcete například pět slov na řádek, můžete změnit první a poslední hvězdičku na {4,}:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})){2,10}/is
Pokud chcete jedno nebo více slov na řádek (mezi řádkem 1 a řádkem 5), můžete změnit obsah v posledních složených závorkách na 0,4 (všimněte si, že používáte 0, protože první řádek se již porovnává).
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)){0,4}/is
Počet slov
Následující výraz omezuje počet povolených slov na minimum 1 a maximum 200:
/^[-\w]+(?:\W+[-\w]+){0,199}\W*$/
Chcete-li zvýšit minimum, změňte nulovou část v {0,199}.
Chcete-li zvýšit nebo snížit maximum, změňte část „199“ v {0,199}.
Ověření času
Formáty času lze zapsat mnoha způsoby. Mezi možnosti patří 12hodinový nebo 24hodinový formát, se sekundami nebo bez nich. Ačkoli lze použít typ otázky Datum (umí zachytit i čas), můžete použít typ otázky Krátký text s jedním z níže uvedených regulárních výrazů pro ověření.
Následující tři řetězce pro ověření kontrolují 24hodinový čas (v pořadí zobrazení) bez sekund, s volitelnými sekundami a nakonec 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]$/
Následující tři řetězce odpovídají 12hodinovému času, stejně jako výše: se sekundami, s volitelný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))$/
Následující tři řetězce odpovídají 12hodinovému nebo 24hodinovému času, stejně jako výše: se sekundami, s volitelný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])$/
Státy USA
Chcete-li ověřit jeden stát, použijte následující výraz (příklad je pro Texas):
- TX pouze velká písmena:
/^(TX)$/
- tx pouze malá písmena:
/^(tx)$/
- TX velká nebo malá písmena:
/^([T|t][X|x])$/
Filtr vulgarismů
Chcete-li z odpovědi odfiltrovat vulgární slova:
/^(?i)((?!\bENTERPROFANITYHERE\b).)*$(?-i)/
Nahraďte "ENTERPROFANITYHERE" svým nevhodným slovem.
Znak \b umožní projít slovům, jako jsou "assassination" a "hello", pokud jako vulgární slovo zadáte "ass" nebo "hell". Stejně to funguje, pokud chcete z odpovědí vyloučit jiná slova, jména apod.
Užitečné odkazy
Na začátku této wiki sekce doporučujeme k testování a vytváření regulárních výrazů použít https://regex101.com/. Pokud vám první možnost nevyhovuje, můžete k vytvoření výrazů použít také https://www.regextester.com/. K vizualizaci regulárních výrazů můžete použít https://extendsclass.com/regex-tester.html.