Предупреждение: 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.