PHP - preg_match () и eregi () не работают? - PullRequest
0 голосов
/ 01 сентября 2010

У меня возникла небольшая проблема при попытке проверить адреса электронной почты с помощью preg_match (или eregi (), если это подходит лучше).Я пробовал несколько шаблонов регулярных выражений сейчас, и, независимо от того, что я делаю, это не работает.

Вот функция:

function validateEmail($email) {

    if(eregi('[a-z||0-9]@[a-z||0-9].[a-z]', $email)){
        return true;
    }

}

Есть идеи, что не так?Я попытался поставить восклицательный знак перед eregi (и preg_match, который я использовал ранее), и это полностью изменило его (как и ожидалось), но все же не заставило его работать должным образом.Я хочу, чтобы он возвращал TRUE, если он не проходит регулярное выражение.

И я не использовал тот же regex в функции preg_match, тогда я нашел другой, потому что я знаю, что вы не можете смешиватьте два.Правильно?

Заранее спасибо!

Ответы [ 2 ]

8 голосов
/ 01 сентября 2010

Вы должны использовать расширение фильтра через filter_var:

filter_var($email, FILTER_VALIDATE_EMAIL);

Если вы хотите регулярное выражение, не используйте строгое правило или мой +@example.org доменбудет отклонено.Используйте что-то вроде ~[^@]+@(?:[^.]+\.)+[A-Za-z]{2,6}~.Хотя это по-прежнему не разрешает действительные электронные письма, такие как "\@"@example.org.

PS: Если вы хотите знать, почему ваше регулярное выражение не работает:

  • eregi устарела, используйте вместо этого preg_match
  • внутри [] не пишите ||.Просто используйте [a-z0-9].|| просто дополнительно разрешил бы | символ
  • Вы забыли квантификаторы + везде.Точно знаю, что каждая часть может иметь только один символ.

Со всеми этими исправленными вещами (но, пожалуйста, не используйте это регулярное выражение!):

preg_match('~[a-z0-9]+@[a-z0-9]+.[a-z]+~i', $email);
2 голосов
/ 01 сентября 2010

Просто чтобы прояснить некоторые вещи, ereg амортизируется.

Чтобы преобразовать это в preg_match, это будет:

if(preg_match('/[a-z||0-9]@[a-z||0-9].[a-z]/', $email)){

Большинство (я использую этот термин свободно) ereg просто нужно добавить разделители (первый и последний /)для преобразования в preg_match.

...