Предупреждение: preg_match() [function.preg-match]: неизвестный модификатор '_'

Ниже приводится регулярное выражение, которое я пытаюсь использовать

$eregicheck = "^([-!#\$%&'*+./0-9=?A-Z^_`a-z{|}~])+@([-!#\$%&'*+/0-9=?A-Z^_`a-z{|}~]+\\.)+[a-zA-Z]{2,4}\$";

Я изменил следующие строки

return eregi($eregicheck, $emailtocheck);

в

return preg_match($eregicheck, $emailtocheck);

Но я не знаю, почему я получаю ошибку

Warning: preg_match() [function.preg-match]: Unknown modifier '_'

2 ответа

Решение

Вы получаете эту ошибку, потому что php требует разделителей до и после шаблона регулярных выражений, который в вашем случае предполагает ^ и после разделителей следуйте модификаторам, в вашем случае _, Поскольку такого модификатора нет, значит, ошибка. Измените код на:

$eregicheck = "/^([-!#\$%&'*+.\/0-9=?A-Z^_`a-z{|}~])+@([-!#\$%&'*+\/0-9=?A-Z^_`a-z{|}~]+\\.)+[a-zA-Z]{2,4}\$/";

PS: это кажется довольно сложным регулярным выражением, вы уверены, что его нельзя упростить? :P

Пытаться:

^([-!#\$%&'*+./0-9=?A-Z\^_`a-z{|}~])+@([-!#\$%&'*+/0-9=?A-Z\^_`a-z{|}~]+\\.)+[a-zA-Z]{2,4}\$

Вам нужно сбежать ^. Это специальный символ, который дает инструкции для RE.

Другие вопросы по тегам