Подтвердить что ты не робот

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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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