2010-01-25 8 views
17

J'aimerais donner à mes utilisateurs la possibilité non seulement de remplir des lettres et des chiffres, mais aussi des lettres "spéciales" comme "á", "é", etc. Cependant, je ne veux pas qu'ils puissent utiliser des symboles comme, « @ », « % », etc.Comment faire correspondre les caractères accentués avec PHP preg?

Est-il possible d'écrire un regex pour ce faire (de préférence sans spécifier chaque lettre spéciale.)

maintenant je « ! »?:

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

Répondre

29

Vous pouvez utiliser Unicode character properties à décrire les caractères:

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

\p{L} décrit la classe des caractères de lettre Unicode.

+0

Semble faire l'affaire. Merci pour la réponse rapide!! – Maurice

1

Quels sont les caractères considérés comme des « mot-caractères » dépend des paramètres régionaux. Vous devez définir un lieu qui a ces personnages dans son natura alphabet l, et utilisez le modificateur /u pour l'expression rationnelle, comme ceci:

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

ne semble pas fonctionner non plus. Mais la solution de Gumbo a fonctionné. Merci pour la réponse – Maurice

3

vous pouvez essayer cette regex:

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

qui capturent également des caractères accentués

+0

ne semble pas fonctionner sur mon serveur. Mais la réponse de Gumbo a fonctionné. Merci pour la réponse – Maurice