2013-06-13 20 views

Odpowiedz

30

Zastosowanie

preg_match('/^[a-z0-9 .\-]+$/i', $firstname) 
+1

dziękuję, uważam, że to jest to, czego potrzebuję – CudoX

+0

Nie ma za co ... – Baba

+0

Z reguły staram się unikać po prostu białego spacji w regex (ponieważ może on faktycznie reprezentować wiele różnych znaków w zależności od kodowania twój edytor) i jawnie, używając '\ 040'. – HorusKol

2

Trudno jedynie nieco tu jest kreska.

Na przestrzeni i kropek, można po prostu dodać je do swojej klasy postaci, tak jak poniżej:

'/^[a-zA-Z0-9 .]+$/' 

Easy.

Myślnik jest nieco trudniejszy, ponieważ łączniki mają specjalne znaczenie w klasie znaków w ten sposób (jak już wiesz, są używane dla zakresów znaków, takich jak a-z). Aby określić łącznik w klasie znaków, musi to być pierwszy znak w klasie (tzn. Nie może zawierać dwóch znaków, w przeciwnym razie jest traktowany jako znacznik zakresu znaków).

Więc wyrażenie byłoby:

'/^[-a-zA-Z0-9 .]+$/' 

nadzieję, że pomoże.

+0

tak, to pomaga. teraz rozumiem jeszcze dokładniejszą składnię funkcji preg_match. – CudoX

+3

Nie musi to być pierwszy znak na myślniku, możesz go uciec używając '\\' –

14

Jeśli nie chcą tylko, aby umożliwić ASCII, a następnie użyć Unicode properties:

preg_match('/^[\p{L}\p{N} .-]+$/', $firstname) 

\p{L} jest każda litera w dowolny językowej, pasuje również chiński, hebrajski, arabski, ... znaków.

\p{N} jakakolwiek postać numeryczną (czyli także np cyfry rzymskie)

jeśli chcesz ograniczyć do cyfr, a następnie użyć \p{Nd}

+1

, jeśli chcesz się umiędzynarodowić, dlaczego nie używać '\ p {N}' zamiast '0-9' –

+0

@CasimiretHippolyte, oczywiście to byłoby zgodne, – stema

+2

Wierzę, że powinieneś dodać modyfikator "u", jeśli ma to działać poprawnie w PHP. W ten sposób: preg_match ('/^[\ p {L} \ p {N} .-] + $/u', $ firstname) – Larpon