Как сопоставить акцентированные символы с PHP preg?

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

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

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

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

person Maurice    schedule 25.01.2010    source источник


Ответы (3)


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

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

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

person Gumbo    schedule 25.01.2010

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

$str = 'perché';
setlocale(LC_ALL, 'it_IT@euro');
echo preg_match('#^\w+$#u', $str);
person Matteo Riva    schedule 25.01.2010
comment
тоже не работает. Но решение Гамбо сработало. Спасибо за ответ - person Maurice; 25.01.2010

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

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

которые улавливают также акцентированные символы

person Manuel    schedule 25.01.2010
comment
не работает на моем сервере. Но ответ Гамбо сработал. Спасибо за ответ - person Maurice; 25.01.2010