20

我想让我的用户不仅可以填写字母和数字,还可以填写“á”、“é”等“特殊”字母。但是,我不希望他们能够使用符号如“!”、“@”、“%”等。

有没有办法编写一个正则表达式来完成这个?(最好不要指定每个特殊字母。)

我现在有:

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

3 回答 3

41

您可以使用Unicode 字符属性来描述字符:

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

\p{L}描述 Unicode 字母字符的类别。

于 2010-01-25T16:43:19.553 回答
5

哪些字符被视为“单词字符”取决于语言环境。您应该设置一个在其自然字母表中包含这些字符的语言环境,并使用正/u则表达式的修饰符,如下所示:

$str = 'perché';
setlocale(LC_ALL, 'it_IT@euro');
echo preg_match('#^\w+$#u', $str);
于 2010-01-25T16:42:01.617 回答
4

你可以试试这个正则表达式:

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

这也抓住了重音字符

于 2010-01-25T16:42:46.747 回答