Actions

Używanie wyrażeń regularnych

From LimeSurvey Manual

This page is a translated version of the page Using regular expressions and the translation is 100% complete.
Other languages:
Deutsch • ‎English • ‎Nederlands • ‎Tiếng Việt • ‎dansk • ‎español • ‎français • ‎italiano • ‎magyar • ‎polski • ‎română • ‎slovenščina • ‎български • ‎中文(中国大陆)‎ • ‎日本語

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.

Template:Uwaga

Important.png  Attention : Pamiętaj, że wszystkie poniższe przykłady są zapisane w jednej linii!



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.