2010-01-25 23 views
17

Vorrei offrire ai miei utenti la possibilità di inserire non solo lettere e numeri, ma anche lettere "speciali" come "á", "é", ecc. Tuttavia, non voglio che siano in grado di usare simboli come “@”, "%”, eccCome abbinare caratteri accentati con preg in PHP?

c'è un modo per scrivere una regex per raggiungere questo obiettivo (preferibilmente senza specificare ogni lettera speciale.)

Ora ho “!”?:

$reg = '/^[\w\-]*$/'; 

risposta

29

Si potrebbe utilizzare Unicode character properties per descrivi i personaggi:

/^[\p{L}-]*$/u 

\p{L} descrive la classe di caratteri lettera Unicode.

+0

Sembra fare il trucco. Grazie per la risposta rapida!! – Maurice

1

quali caratteri sono considerati "parola-personaggi" dipende dalle impostazioni locali. È necessario impostare un locale che ha quei personaggi nella sua natura l alfabeto, e utilizzare il modificatore /u per l'espressione regolare, in questo modo:

$str = 'perché'; 
setlocale(LC_ALL, '[email protected]'); 
echo preg_match('#^\w+$#u', $str); 
+0

non sembra funzionare neanche. Ma la soluzione di Gumbo ha funzionato. Grazie per la risposta – Maurice

3

si può provare con questa espressione regolare:

$reg = '~[^\\pL\d]+~u'; 

che catturano anche accentati caratteri

+0

non sembra funzionare sul mio server. Ma la risposta di Gumbo ha funzionato. Grazie per la risposta – Maurice

Problemi correlati