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