Actions

Używanie wyrażeń regularnych

From LimeSurvey Manual

Revision as of 15:42, 26 September 2023 by Maren.fritz (talk | contribs) (Created page with "<source lang="html">/^(?i)((?!\bWPROWADŹ TUTAJ WŁAŚCIWOŚĆ\b).)*$(?-i)/</source>")

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

  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.

The \b will allow passing of words such as "assassination" and "hello" if you enter "ass" or "hell" as your profanity word. This also works if you are trying to omit other words, names etc. from answers.


Helpful links

In the beginning of this wiki section, we recommend you to use https://regex101.com/ to test/create regular expressions. You can also use https://www.regextester.com/ to create expressions in case you are unhappy about the first option. You can use https://extendsclass.com/regex-tester.html to visualize regular expressions.