Ответ 1
Вы можете использовать свойства символа Юникода для описания символов:
/^[\p{L}-]*$/u
\p{L}
описывает класс букв символов Unicode.
Мне нравится давать моим пользователям возможность не только заполнять буквы и цифры, но и "специальные" буквы, такие как "á", "é" и т.д. Однако я не хочу, чтобы они могли использовать символы, такие как "!", "@", "%" и т.д.
Есть ли способ написать регулярное выражение для выполнения этого? (Предпочтительно без указания каждой специальной буквы.)
Теперь у меня есть:
$reg = '/^[\w\-]*$/';
Вы можете использовать свойства символа Юникода для описания символов:
/^[\p{L}-]*$/u
\p{L}
описывает класс букв символов Unicode.
вы можете попробовать с этим регулярным выражением:
$reg = '~[^\\pL\d]+~u';
которые улавливают также акцентированные символы
Какие символы считаются "символами слов", зависит от локали. Вы должны установить локаль, которая имеет эти символы в своем естественном алфавите, и использовать модификатор /u
для регулярного выражения, например:
$str = 'perché';
setlocale(LC_ALL, '[email protected]');
echo preg_match('#^\w+$#u', $str);