Как мне сопоставить акцентированные символы с PHP preg? - PullRequest
20 голосов
/ 25 января 2010

Я хотел бы дать своим пользователям возможность не только заполнять буквы и цифры, но также и «специальные» буквы, такие как «á», «é» и т.д. использовать такие символы, как «!», «@», «%» и т. д.

Есть ли способ написать регулярное выражение для достижения этой цели? (Желательно без указания каждой специальной буквы.)

Теперь у меня есть:

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

Ответы [ 3 ]

39 голосов
/ 25 января 2010

Вы можете использовать Свойства символов Unicode для описания символов:

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

\p{L} описывает класс буквенных символов Unicode.

4 голосов
/ 25 января 2010

вы можете попробовать с этим регулярным выражением:

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

, которые ловят также ударные символы

4 голосов
/ 25 января 2010

Какие символы считаются «символами слова», зависит от локали. Вы должны установить локаль, в которой эти символы находятся в естественном алфавите, и использовать модификатор /u для регулярного выражения, например:

$str = 'perché';
setlocale(LC_ALL, 'it_IT@euro');
echo preg_match('#^\w+$#u', $str);
...