2010-01-25 6 views
17

Ich möchte meinen Benutzern die Möglichkeit geben, nicht nur Buchstaben und Zahlen, sondern auch "spezielle" Buchstaben wie "á", "é" usw. einzugeben. Ich will aber nicht, dass sie es können verwendet Symbole wie „@“, „%“ usw.Wie passe ich Akzentzeichen mit PHP Preg?

gibt es eine Möglichkeit, einen regulären Ausdruck zu schreiben, dies zu tun (vorzugsweise ohne jeden besonderen Brief angeben.)

Jetzt hat ich „!?“:

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

Antwort

29

Sie könnten Unicode character properties verwenden, um beschreiben Sie die Zeichen:

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

\p{L} beschreibt die Klasse der Unicode-Buchstaben.

+0

Scheint, den Trick zu tun. Danke für die schnelle Antwort!! – Maurice

1

welche Zeichen gelten als „Wort-Zeichen“ ist abhängig von der locale. Sie sollten ein Gebietsschema festgelegt, die diese Zeichen in seiner natura hat l Alphabet, und verwenden Sie den /u Modifikator für den regulären Ausdruck, wie folgt aus:

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

scheint auch nicht zu funktionieren. Aber die Lösung von Gumbo hat funktioniert. Danke für die Antwort – Maurice

3

können Sie mit dieser Regex versuchen:

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

die auch Zeichen mit Akzent fangen

+0

scheint nicht auf meinem Server zu arbeiten. Aber Gumbo's Antwort funktionierte. Danke für die Antwort – Maurice