Изменение eregi в preg_match не работает

У меня есть этот код в моей форме PHP:

function IsEmail($email)
{
    $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
    return (eregi($pattern,$email)) ? true : false;
};

И мой локальный сервер выдает мне ошибку:

Функция eregi() устарела

Поэтому я изменил свой код:

function IsEmail($email)
{
    $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
    return (preg_match($pattern,$email)) ? true : false;
};

и теперь я получаю эту ошибку:

Предупреждение: preg_match() [function.preg-match]: конечный разделитель '^' не найден

Любая идея?

2 ответа

Вы должны начать регулярное выражение с / а также закончить его /,

Подобно:

$pattern = "/^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$/";

Добавьте разделитель.

$pattern = "/^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$/";

В этом случае я использовал / в качестве разделителя. Это происходит один раз в начале и один раз в конце.

Обратите внимание, что вы должны экранировать символ-разделитель, если он встречается в самом регулярном выражении и должен действовать не как разделитель, а как обычный совпадающий символ. Так что каждый / в вашем регулярном выражении должен быть экранирован \/ (кроме разделителей конечно). Но у вас нет ничего внутри вашего регулярного выражения.

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