Używanie wyrażeń regularnych
From LimeSurvey Manual
Wyrażenia regularne muszą zaczynać się i kończyć ukośnikiem („/”). Dobra bibliotekę wyrażeń regularnych można znaleźć pod adresem http://www.regexlib.net/. Te wzorce będą prawie zawsze działać, jeśli są otoczone ukośnikami.
Aby przetestować wyrażenie regularne, możesz użyć tego testera wyrażeń regularnych.
Ważne: Wyrażenia regularne w warunkach
Pamiętaj, że używając wyrażeń regularnych w edytorze warunków, NIE dodawaj ukośnika początkowego i końcowego.
Weryfikacja e-mailem
Aktualizacja (12/2018): Ponieważ obecnie nazwy domen nie mogą zawierać tylko znaków specjalnych, takich jak „ü”, ale także używać więcej niż 3 znaków jako nazwy domeny, np. .tech lub .company, poniższe wyrażenie regularne adresu e-mail sprawdza tylko, czy „@” i „.” istnieje w podanym adresie e-mail.
/^.+?@.+?\..+$/
Jeśli chcesz sprawdzić poprawność jednego adresu w wierszu, w długim, wielowierszowym polu tekstowym:
/^(((\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\r\ n)?\n?)+)*)$/
W tym przestarzałym wyrażeniu regularnym nazwa domeny jest ograniczona do 3 znaków, co nie obejmuje wszystkich dostępnych domen:
/^(\w[-._+\w]*\w@\w[-._\w]*\w\.\w{2,3})$/
Kody pocztowe
Australijskie kody pocztowe:
/^[0-9]{4}/
Brazylijskie kody pocztowe
/^[0-9]{2}\.[0-9]{3}-[0-9]{3}$/
Kanadyjskie kody pocztowe
/^[a-zA-Z]\d{1}[a-zA-Z](\-| |)\d{1}[a-zA-Z]\d{1}$/
Kody pocztowe w USA
/^[0-9]{5}([- /]?[0-9]{4})?$/
Aby kod pocztowy zaczynał się od zera, użyj:
/^[0-9]{5}(?:-[0-9]{4})?$/
Kody pocztowe w Wielkiej Brytanii
/^[AZ][AZ]?[0-9][A-Z0-9]? ?[0-9][ABDEFGHJLNPQRSTUWXYZ]{2}$/i
Należy pamiętać, że nie jest to zbyt dokładne, a dokładniejsza walidacja jest znacznie bardziej złożona. Na przykład zobacz odpowiedź StackOverflow i Wikipedia, aby uzyskać więcej Informacja.
Francuskie kody pocztowe
/(^[0-8]\d\d{3}$)|(^9[0-5]\d{3}$)|(^97[1-6]\d{2}$)| (^98[46-8]\d{2}$)/
Powyższe wyrażenie jest bardzo precyzyjne i pozwoli sprawdzić, czy istnieje Departament Francuski (pierwsze dwie cyfry), w tym Departamenty Zamorskie i Terytoria Zamorskie (DOM-TOM).
Numery telefonów
Numery telefonów w USA
/^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}(?:\-?|\ ?))[2-9]\d {2}[- ]?\d{4}$/
Lub
/^[\(\)\.\- ]{0,}[0-9]{3}[\(\)\.\- ]{0,}[0-9]{3}[\(\ )\.\- ]{0,}[0-9]{4}[\(\)\.\- ]{0,}$/
Ta druga opcja będzie pasować do wszystkich numerów telefonów w Kanadzie i USA, które zawierają symbole inne niż cyfry, w tym:
. ( ) - (przestrzeń)
Umożliwi to dopasowanie numerów telefonów przypominających poniższe:
- (555)555 5555
- 555.555.5555
- 555 555 5555
- (555)-555-5555
- 555-555-5555
- 555555555
Australijskie numery telefonów
Poniższe wzorce pasują do wszystkich australijskich numerów telefonów komórkowych i stacjonarnych, w tym z prefiksem kraju „+61”:
- (02) 9123 6535
- 03 1234-5345
- 0412 345 678
- + 61 2 3456 789
Ale nie:
- 234 3450 234
- a234 534 3432
- 134567
- 123456789013
Nawiasy, białe znaki i łączniki są ignorowane.
Wymienione tutaj wersje „bardzo precyzyjne:” dopasowują się do pierwszych czterech lub pięciu cyfr numeru, aby upewnić się, że są to prawidłowe numery australijskie.
Pole „Niezbyt precyzyjne:” pasuje tylko do pierwszej i drugiej cyfry, więc może pozwolić na nieprawidłowe liczby.
Wszystkie australijskie numery telefonów (komórkowe i stacjonarne – wymagany numer kierunkowy)
Bardzo dokładny:
/^\(?(?:\+?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})$/
Mało precyzyjne:
/^(?:\+?61|0)[2-478](?:[ -]?[0-9]){8}$/
Wszystkie australijskie numery telefonów (tylko telefony stacjonarne – wymagany numer kierunkowy)
Bardzo dokładny:
/^\(?(?:\+?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}$/
Mało precyzyjne:
/^(?:\+?61|\(?0)[2378]\)?(?:[ -]?[0-9]){8}$/
Numery telefonów stacjonarnych w Nowej Południowej Walii (opcjonalnie numer kierunkowy)
Bardzo dokładny:
/^(?:\(?(?:\+?61|0)2\)?[ -]?)?(?:3[ -]?[38]|[46-9][ -]?[ 0-9]|5[ -]?[0-35-9])(?:[ -]?[0-9]){6}$/
Mało precyzyjne:
/^(?:\(?(?:\+?61|0)2\)?(?:[ -]?[0-9]){7}[0-9]$/
Numery telefonów stacjonarnych w Wiktorii i Tasmanii (opcjonalnie numer kierunkowy)
Bardzo dokładny:
/^(?:\(?(?:\+?61|0)3\)?[ -]?)?(?:4[ -]?[0-57-9]|[57-9][ -]?[0-9]|6[ -]?[1-67])(?:[ -]?[0-9]){6}$/
Mało precyzyjne:
/^(?:\(?(?:\+?61|0)3\)?(?:[ -]?[0-9]){7}[0-9]$/
Numery telefonów stacjonarnych w Queensland (opcjonalnie numer kierunkowy)
Bardzo dokładny:
/^(?:\(?(?:\+?61|0)7\)?[ -]?)?(?:[2-4][ -]?[0-9]|5[ -] ?[2-7]|7[ -]?6)(?:[ -]?[0-9]){6}$/
Mało precyzyjne:
/^(?:\(?(?:\+?61|0)7\)?(?:[ -]?[0-9]){7}[0-9]$/
Australia Południowa, Terytorium Północne, Numery telefonów stacjonarnych w Australii Zachodniej (opcjonalnie numer kierunkowy)
Bardzo dokładny:
/^(?:\(?(?:\+?61|0)8\)?[ -]?)?(?:5[1-4]|6[0-8]|[7-9] [0-9])$/
Mało precyzyjne:
/^(?:\(?(?:\+?61|0)8\)?(?:[ -]?[0-9]){7}[0-9]$/
Tylko australijskie numery telefonów komórkowych
Bardzo dokładny:
/^(?:\+?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}$/
Mało precyzyjne:
/^(?:\(?(?:\+?61|0)4\)?(?:[ -]?[0-9]){7}[0-9]$/
Belgijski numer telefonu
/^((\+|00)32\s?|0)(\d\s?\d{3}|\d{2}\s?\d{2})(\s?\d{2 }){2}$/
Belgijski numer telefonu komórkowego
/^((\+|00)32\s?|0)4(60|[789]\d)(\s?\d{2}){3}$/
Francuski numer telefonu
/^((\+|00)33\s?|0)[1-59](\s?\d{2}){4}$/
Francuski numer telefonu komórkowego
/^((\+|00)33\s?|0)[67](\s?\d{2}){4}$/
Numer telefonu w Luksemburgu
/^((\+|00\s?)352)?(\s?\d{2}){3,4}$/
Numer telefonu komórkowego w Luksemburgu
/^((\+|00\s?)352)?\s?6[269]1(\s?\d{3}){2}$/
Znaki niemieckie (z opcjonalnym plusem lub minusem)
/^[1-6]{1}[\+|\-]?$/
Weryfikacja wieku
Przykład: Wiek 20-99
/([2-9][0-9])/
Przykład: Wiek 18-35
/(1[8-9]|2[0-9]|3[0-5])/
Przykład: Wiek 19-65
/^(1[8-9]|[2-5][0-9]|6[0-5])$/
Weryfikacja numeru
Liczby 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}$/ robi to samo co powyżej, ale powinno działać trochę szybciej
Liczby od 1 do 999, od 1.000 do 999.999 do 999.999.999
/^[1-9][0-9]{0,2}(?:\.[0-9]{3}){0,2}$/
Akceptuje liczby od 1 do 999, 1.000 do 999.999 do 999.999.999, ale odrzuca liczby takie jak 999.1.1 , 94.22.22, 999.1.22, 999.11.1, 999.1.333
Weryfikacja liczb z opcjonalnym ułamkiem dziesiętnym (dla ceny)
Akceptuje liczby od 0 do 199, z opcjonalnym 2 miejscami po przecinku:
/^([1][0-9][0-9]|[1-9][0-9]|[0-9])((\.)[0-9][0-9]) ?$/
Weryfikacja liczb z separatorem tysięcy
Spacja jako separator, bez minusa
/^(?!0)\d{1,3}(\ \d{3})*$/
Kropka jako separator, minus dozwolony
/^-?(?!0)\d{1,3}(\.\d{3})*$/
Wymusza użycie dwóch kropek dziesiętnych i akceptuje liczby od 1,00 do 999 999 999,00 z opcjonalnym przecinkiem oddzielającym tysiące/miliony w tym wszystkie następujące: 1,00, 1000,00, 12 345,67, 12345,02, 123 456 468,00, 1234566,00, 1 23456789,00 ale nie 1 ,23,00, 12,3,4 lub 1234,43,04
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
Podobnie jak powyżej: wymusza dwa miejsca dziesiętne, ale akceptuje „0” przed separatorem dziesiętnym „,”.
/[0-9]{0,2}(?:,?[0-9]{3}){0,3}\.[0-9]{2}$/
To samo co powyżej, ale dwa miejsca po przecinku są opcjonalne:
/^[1-9][0-9]{0,2}(?:,?[0-9]{3}){0,3}(?:\.[0-9]{2}) ?$/
Miesiąc (1-12)
Jeśli chcesz zapytać o miesiąc urodzenia danej osoby, możesz sprawdzić wprowadzone dane w następujący sposób:
/^[0]*[1-9]$|^[0]*1[0-2]$/
Minimalna szerokość (w tym przykładzie ustawiona na 3)
/^.{3,}$/
Waluta
Waluta amerykańska (opcjonalnie znak dolara i centy)
/^\$?\d+(\.(\d{2}))?$/
Sprawdź użycie przecinka:
/^\$?\d{1,3}(\d+(?!,))?(,\d{3})*(\.\d{2})?$/
Szwajcarska cena
Liczba z dwoma liczbami dziesiętnymi po przecinku, z których ostatnia to 5 lub 0:
/^(\d+)(\.\d(05)?)?$/
Sprawdź wynik
1-10
/^[1-9]{1}$|^10$/
1-100
/^[1-9]?[0-9]{1}$|^100$/
Weryfikacja tekstu
typ pytań z wieloma krótkimi tekstami nie obsługuje obecnie odpowiedzi minimalnej ani maksymalnej. Jednym ze sposobów obejścia tego problemu jest użycie typ pytania z długim tekstem z wyrażeniem regularnym.
Poniższe wyrażenie sprawdza co najmniej jedno słowo w wierszu w co najmniej 3 i nie więcej niż 10 wierszach:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?! & \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^, .;:?!& \n\r]+)*)){2,10}/is
Jeśli chcesz, powiedz pięć słów w każdym wierszu, możesz zmienić pierwszą i ostatnią gwiazdkę/gwiazdkę na {4,}:
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})(?:[,.; :?!& \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+){4,})){2,10}/jest
Jeśli chcesz mieć jedno lub więcej słów w wierszu (między wierszem 1 a wierszem 5), możesz zmienić treść znajdującą się w ostatnich nawiasach klamrowych na „0,4” (pamiętaj, że używasz 0, ponieważ już dopasowujesz pierwsza linijka).
/(?:[^,.;:?!& \n\r]+(?: [^,.;:?!& \n\r]+)*)(?:[,.;:?! & \n\r]?(?:\n|\r|\n\r|\r\n)(?:[^,.;:?!& \n\r]+(?: [^, .;:?!& \n\r]+)*)){0,4}/is
Liczba słów
Poniższe ogranicza liczbę dozwolonych słów do minimum 1 i maksymalnie 200:
/^[-\w]+(?:\W+[-\w]+){0,199}\W*$/
Aby zwiększyć minimum, zmień część zerową z {0,199}.
Aby zwiększyć lub zmniejszyć wartość maksymalną, zmień część „199” z {0,199}.
Weryfikacja czasu
Istnieje wiele sposobów zapisywania formatów czasu. Niektóre z możliwych opcji to 12-godzinny lub 24-godzinny, z sekundami lub bez. Chociaż istnieje możliwość użycia data (może także uwzględniać czas), możesz użyć typ pytania krótki dowolny tekst z jednym z poniższe wyrażenia regularne służące do sprawdzania poprawności.
Poniższe trzy ciągi walidacyjne sprawdzają czas 24 godzin (w kolejności występowania) bez sekund, z opcjonalnymi sekundami na końcu z wymaganymi 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]$/
Poniższe trzy odpowiadają czasowi 12-godzinnemu, jak powyżej, z sekundami, opcjonalnymi sekundami i wymaganymi 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))$/
Poniższe trzy odpowiadają czasowi 12- lub 24-godzinnemu jak powyżej, z sekundami, opcjonalnymi sekundami i wymaganymi 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])$/
Stany USA
Aby sprawdzić poprawność dla jednego stanu, użyj następującego polecenia (przykładem jest Teksas):
- TX tylko wielkie litery:
/^(TX)$/
- tx tylko małe litery:
/^(tx)$/
- TX wielkie lub małe litery:
/^([T|t][X|x])$/
Filtr wulgaryzmów
Aby odfiltrować wulgaryzmy z odpowiedzi:
/^(?i)((?!\bWPROWADŹ TUTAJ WŁAŚCIWOŚĆ\b).)*$(?-i)/
Zastąp „ENTERPROFANITYHERE” swoim złym słowem.
\b pozwoli na przekazywanie słów takich jak „zabójstwo” i „cześć”, jeśli jako wulgaryzmy wpiszesz „tyłek” lub „piekło”. Działa to również, jeśli próbujesz pominąć w odpowiedziach inne słowa, imiona itp.
Przydatne linki
Na początku tej sekcji wiki zalecamy użycie https://regex101.com/ do testowania/tworzenia wyrażeń regularnych. Możesz także użyć https://www.regextester.com/ do tworzenia wyrażeń na wypadek, gdybyś nie był zadowolony z pierwszej opcji. Możesz użyć https://extendsclass.com/regex-tester.html do wizualizacji wyrażeń regularnych.