PHP preg_match: несколько повторений для одного класса символов - PullRequest
1 голос
/ 31 января 2020

Я хотел бы разрешить несколько повторений для одного определенного класса символов:).

$data = 'abc@abc-abc.abc';
echo preg_match('/^[a-z]+[a-z0-9._-]+[a-z]+@+[a-z0-9]+[._-]?+[a-z0-9]+\.?+([a-z0-9]{2,})$/', strtolower($data)); // works (echo 1)

$data = 'abc@abc-abc.abc.abc';
echo preg_match('/^[a-z]+[a-z0-9._-]+[a-z]+@+[a-z0-9]+[._-]?+[a-z0-9]+\.?+([a-z0-9]{2,})$/', strtolower($data)); // doesn't work (echo 0, but should return 1)

1 Ответ

0 голосов
/ 31 января 2020

Вы можете добавить точку внутри группы без захвата (?: в конце и повторить эту группу целиком 0 или более раз, используя *

Используйте + вместо *, если часть, начинающаяся с . или объединенная [._-] в конце, должна появляться как минимум 1 раз

^[a-z]+[a-z0-9._-]+[a-z]+@+[a-z0-9]+[._-]?+[a-z0-9]+(?:[._-][a-z0-9]{2,})+$                                      

Regex demo

...