Wyrażenia regularne i walidacja danych w formularzach
Wyrażenia regularne i walidacja danych w formularzach
Czym są wyrażenia regularne i jak ich używać?
Wyrażenie regularne, w skrócie regex, to wzorzec opisujący określoną ilość tekstu. Na przykład, aby mieć pewność, że osoba wypełniająca formularz poda dokładnie taki tekst, jakiego potrzebujesz, możesz użyć wyrażenia regularnego, aby wymusić określony wzorzec danych wejściowych lub zweryfikować je.
Załóżmy na przykład, że chcesz poprosić o brytyjski numer ubezpieczenia społecznego (NIN). Ma on wzór 2 znaków, po których następuje 6 cyfr, a następnie kolejny znak. Wyrażenie regularne odpowiadające temu wzorowi wyglądałoby następująco:
[az|AZ]{2}[0-9]{6}[az|AZ]
Tutaj [az] oznacza „dowolny znak małej litery”, [AZ] oznacza „dowolny znak wielkiej litery”, | oznacza lub, więc [az|AZ] oznacza „dowolny znak”, {2} oznacza „powtórz dwa razy” itd.
Niektóre rządy udostępniają wyrażenia regularne dla powszechnie używanych wzorców. Na przykład zobacz ten artykuł w Wikipedii o brytyjskich kodach pocztowych.
Aby szybko zapoznać się z instrukcją dotyczącą wyrażeń regularnych, wyszukaj „Przewodnik po wyrażeniach regularnych” lub czytaj dalej.
Charakter | Legenda | Przykład | Dopasowanie próbki |
|---|---|---|---|
\D | Większość silników: jedna cyfra | plik_\d\d | plik_25 |
\D | .NET, Python 3: jedna cyfra Unicode w dowolnym skrypcie | plik_\d\d | plik_9੩ |
\w | Większość silników: „znak słowa”: litera ASCII, cyfra lub podkreślenie | \w-\w\w\w | A-b_1 |
\w | .Python 3: „znak słowa”: litera, ideogram, cyfra lub podkreślenie Unicode | \w-\w\w\w | 字-ま_۳ |
\w | .NET: „znak słowa”: litera, ideogram, cyfra lub łącznik Unicode | \w-\w\w\w | 字-ま‿۳ |
\S | Większość silników: „znak odstępu”: spacja, tabulator, nowy wiersz, powrót karetki, tabulator pionowy | a\sb\sc | ab |
\S | .NET, Python 3, JavaScript: „znak odstępu”: dowolny separator Unicode | a\sb\sc | ab |
\D | Jeden znak, który nie jest cyfrą zgodnie z definicją \d Twojego silnika | \D\D\D | ABC |
\W | Jeden znak, który nie jest znakiem słowa zdefiniowanym przez \w Twojego silnika | \W\W\W\W\W | *-+=) |
\S | Jeden znak, który nie jest znakiem odstępu , zgodnie z definicją \s Twojego silnika | \S\S\S\S | Jo-jo |
Kwantyfikatory
Kwantyfikator | Legenda | Przykład | Dopasowanie próbki |
|---|---|---|---|
+ | Jeden lub więcej | Wersja \w-\w+ | Wersja A-b1_1 |
{3} | Dokładnie trzy razy | \D{3} | ABC |
{2,4} | Dwa do czterech razy | \d{2,4} | 156 |
{3,} | Trzy lub więcej razy | \w{3,} | samouczek_wyrażeń_regularnych |
* | Zero lub więcej razy | ABC* | AAACC |
? | Raz albo wcale | liczba mnoga? | mnogi |
Więcej postaci
Charakter | Legenda | Przykład | Dopasowanie próbki |
|---|---|---|---|
. | Dowolny znak z wyjątkiem podziału wiersza | prąd zmienny | ABC |
. | Dowolny znak z wyjątkiem podziału wiersza | .* | nieważne, człowieku. |
\ . | Kropka (znak specjalny: należy go poprzedzić znakiem \) | a\.c | prąd zmienny |
\ | Ucieka przed znakiem specjalnym | \.\*\+\? \$\^\/\\ | .*+? $^/\ |
\ | Ucieka przed znakiem specjalnym | \[\{\(\)\}\] | [{()}] |
Logika
Logika | Legenda | Przykład | Dopasowanie próbki |
|---|---|---|---|
| | Alternacja / operand OR | 22|33 | 33 |
( … ) | Grupa przechwytująca | A(mrówka|jabłko) | Apple (przechwytuje „pple”) |
\1 | Zawartość grupy 1 | r(\w)g\1x | wyrażenie regularne |
\2 | Zawartość grupy 2 | (\d\d)\+(\d\d)=\2\+\1 | 12+65=65+12 |
(?: … ) | Grupa nieprzechwytująca | A(?:nt|jabłko) | Jabłko |
Więcej białej przestrzeni
Charakter | Legenda | Przykład | Dopasowanie próbki |
|---|---|---|---|
\T | Patka | T\t\w{2} | Karta |
\R | Znak powrotu karetki | zobacz poniżej | |
\N | Znak przesunięcia wiersza | zobacz poniżej | |
\r\n | Separator wiersza w systemie Windows | AB\r\nCD | AB |
\N | Perl, PCRE (C, PHP, R…): jeden znak, który nie jest podziałem wiersza | \N+ | ABC |
\H | Perl, PCRE (C, PHP, R…), Java: jeden poziomy znak odstępu: tabulator lub separator spacji Unicode | ||
\H | Jeden znak, który nie jest poziomą spacją | ||
\v | .NET, JavaScript, Python, Ruby: pionowa karta | ||
\v | Perl, PCRE (C, PHP, R…), Java: jeden znak odstępu pionowego: nowy wiersz, powrót karetki, tabulator pionowy, nowy formularz, separator akapitu lub wiersza | ||
\V | Perl, PCRE (C, PHP, R…), Java: dowolny znak, który nie jest pionową spacją | ||
\R | Perl, PCRE (C, PHP, R…), Java: jeden podział wiersza (para znaków powrotu karetki + nowego wiersza oraz wszystkie znaki dopasowane przez \v) |
Więcej kwantyfikatorów
Kwantyfikator | Legenda | Przykład | Dopasowanie próbki |
|---|---|---|---|
+ | Znak + (jeden lub więcej) oznacza „chciwy” | \d+ | 12345 |
? | Sprawia, że kwantyfikatory stają się „leniwe” | \d+? | 1 w 1 2345 |
* | * (zero lub więcej) oznacza „chciwy” | A* | AAA |
? | Sprawia, że kwantyfikatory stają się „leniwe” | A*? | pusty w AAA |
{2,4} | Dwa do czterech razy „chciwy” | \w{2,4} | abcd |
? | Sprawia, że kwantyfikatory stają się „leniwe” | \w{2,4}? | ab w ab cd |
Klasy postaci
Charakter | Legenda | Przykład | Dopasowanie próbki |
|---|---|---|---|
[…] | Jeden ze znaków w nawiasach | [AEIOU] | Jedna wielka samogłoska |
[…] | Jeden ze znaków w nawiasach | T[ao]p | Dotknij lub od góry |
- | Wskaźnik zasięgu | [az] | Jedna mała litera |
[xy] | Jeden ze znaków w zakresie od x do y | [AZ]+ | ŚWIETNIE |
[…] | Jeden ze znaków w nawiasach | [AB1-5w-z] | Jeden z: A, B, 1, 2, 3, 4, 5, w, x, y, z |
[xy] | Jeden ze znaków w zakresie od x do y | [ -~]+ | Znaki w sekcji drukowanej tabeli ASCII . |
[^x] | Jedna postać, która nie jest x | [^az]{3} | A1! |
[^xy] | Jeden ze znaków nieznajdujący się w zakresie od x do y | [^ -~]+ | Znaki, których nie ma w drukowanej części tabeli ASCII . |
[\d\D] | Jeden znak będący cyfrą lub niecyfrą | [\d\D]+ | Jakiekolwiek znaki, w tym- |
[\x41] | Odpowiada znakowi na pozycji szesnastkowej 41 w tabeli ASCII, tj. A | [\x41-\x45]{3} | ABE |
Kotwice i granice
Kotwica | Legenda | Przykład | Dopasowanie próbki |
|---|---|---|---|
^ | Początek ciągu lub początek wiersza , w zależności od trybu wielowierszowego. (Ale gdy [^w nawiasach] oznacza to „nie”) | ^abc .* | abc (początek wiersza) |
$ | Koniec ciągu lub koniec linii w zależności od trybu wieloliniowego. Wiele subtelności zależnych od silnika. | .*? koniec$ | to jest koniec |
\A | Początek ciągu | \Aabc[\d\D]* | abc (ciąg... |
\z | Sam koniec sznurka | koniec\z | to jest...\n... koniec |
\Z | Koniec ciągu lub (oprócz Pythona) przed ostatnim podziałem wiersza | koniec\Z | to jest...\n... koniec \n |
\G | Początek ciągu lub koniec poprzedniego dopasowania | ||
\B | Granica słowa | Bob.*\bkot\b | Bob zjadł kota |
\B | Granica słowa | Bob.*\b\кошка\b | Bob zjadł koskę |
\B | c.*\Bcat\B.* | naśladowcy |