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
od 0 do 9

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
C

\S

.NET, Python 3, JavaScript: „znak odstępu”: dowolny separator Unicode

a\sb\sc

ab
C

\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
płyta CD

\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-
dodając nowe linie, których zwykła kropka nie pasuje

[\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
(wszystkie główne silniki oprócz JS)

\Aabc[\d\D]*

abc (ciąg...
...start)

\z

Sam koniec sznurka
Niedostępne w Pythonie i JS

koniec\z

to jest...\n... koniec

\Z

Koniec ciągu lub (oprócz Pythona) przed ostatnim podziałem wiersza
Niedostępne w JS

koniec\Z

to jest...\n... koniec \n

\G

Początek ciągu lub koniec poprzedniego dopasowania
.NET, Java, PCRE (C, PHP, R…), Perl, Ruby

\B

Granica słowa
Większość silników: pozycja, w której tylko jedna strona zawiera literę ASCII, cyfrę lub podkreślenie

Bob.*\bkot\b

Bob zjadł kota

\B

Granica słowa
.NET, Java, Python 3, Ruby: pozycja, w której tylko jedna strona jest literą, cyfrą lub podkreśleniem Unicode

Bob.*\b\кошка\b

Bob zjadł koskę

\B

Nie jest to granica słów

c.*\Bcat\B.*

naśladowcy

Używamy plików cookie, aby ulepszyć przeglądanie i analizować ruch na stronie. Klikając "Akceptuj", wyrażasz zgodę na używanie przez nas plików cookie. Polityka prywatności