регулярное выражение для письма с любого языка не работает в php - PullRequest
2 голосов
/ 25 апреля 2019

Я использую следующее выражение регулярного выражения, чтобы разрешить буквы на любом языке, цифры, подчеркивания и пробелы.

^[\p{L}0-9 _]\*[\p{L}0-9][\p{L}0-9 _]\*$

Он отлично работает в инструментах онлайн-тестирования, но не в моем PHP-коде. Например, оно не будет совпадать с любым русским словом "Привет".

Есть идеи почему?

Версия PHP: PHP 7.1.16

Ответы [ 2 ]

3 голосов
/ 25 апреля 2019

У вас есть пара проблем с вашим регулярным выражением.Во-первых, он будет соответствовать только 3 символам без добавления * или + после одного из наборов символов.Во-вторых, чтобы соответствовать юникоду в PHP, вам нужно использовать модификатор u в вашем регулярном выражении.Попробуйте вместо этого:

$str = 'Привет';
$regex = '/^[\p{L}0-9 _][\p{L}0-9]+[\p{L}0-9 _]$/u';
echo preg_match($regex, $str);

Вывод:

1

Демонстрация на 3v4l.org

1 голос
/ 25 апреля 2019

Этот RegEx может помочь вам просто сделать это:

^[\pL_\w\d\s]+$

enter image description here

Вы можете упростить его еще больше, и он все еще может работать, например:

[\pL_\d\s]+

, который вы могли бы удалить \ w для слов, и начать с ^ и завершить $ символов.

Исходя из вашего RegEx, я бы подумал, что этот RegEx может быть тот, который может работать:

([\pL\d\s_]+)\*([\pL\d]+[\pL\d\s_]+)\*

enter image description here

Создает две группы, используя ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...