2013-06-13 21 views

risposta

30

Usa

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

grazie, credo che questo sia quello che mi serve – CudoX

+0

Siete i benvenuti .... – Baba

+0

Di solito, tendo ad evitare semplicemente uno spazio bianco nella regex (poiché potrebbe effettivamente rappresentare un numero di caratteri diversi a seconda della codifica di il tuo editor) ed essere esplicito usando '\ 040'. – HorusKol

2

L'unica po 'difficile qui è il cruscotto.

Per gli spazi e punti, si può semplicemente aggiungere alla vostra classe di caratteri, in questo modo:

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

facile.

Il trattino è leggermente più difficile perché i trattini hanno un significato speciale in una classe di caratteri come questa (come già sapete, vengono utilizzati per intervalli di caratteri come a-z). Per specificare un trattino in una classe di caratteri, deve essere il primo carattere della classe (cioè non deve essere compreso tra due caratteri, altrimenti viene trattato come un indicatore di intervallo di caratteri).

Così la vostra espressione sarebbe:

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

Speranza che aiuta.

+0

sì questo aiuta. ora sto anche comprendendo ulteriormente la sintassi giusta per la funzione preg_match. – CudoX

+3

Non deve essere il primo carattere per trattino, puoi scappare usando '\\' –

14

Se non solo desidera consentire ASCII, quindi utilizzare Unicode properties:

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

\p{L} è una lettera in qualsiasi lingua partite anche cinese, ebraico, arabo, ... caratteri.

\p{N} qualsiasi tipo di carattere numerico (significa anche numeri romani per esempio)

se si vuole limitare a cifre, quindi utilizzare \p{Nd}

+1

se vuoi internazionalizzare, perché non usare '\ p {N}' invece di '0-9' –

+0

@CasimiretHippolyte, ovviamente sarebbe coerente, – stema

+2

Credo che dovresti aggiungere un modificatore 'u' se questo deve funzionare correttamente in PHP. In questo modo: preg_match ('/^[\ p {L} \ p {N} .-] + $/u', $ firstname) – Larpon

Problemi correlati