Проверка на правильность email

iЭто шпаргалочка по проверке валидности email.

Если Вы используете какой-нибудь PHP-фреймворк — то там конечно есть средcтва для валидации формы. В Kohana есть средства валидации формы. Но иногда нужно просто по-быстрому проверить правильность заполнения E-mail, без создания класса, задания полей, правил и прочего приготовления

В Kohana для таких целей есть такой хелпер Valid с набором нужных проверок

if(Valid::email($email)){
    echo "Email - правильный!";
}

Если без фреймворка можно так:

if(preg_match("/[0-9a-z_]+@[0-9a-z_\-^\.]+\.[a-z]{2,3}/i", $email)){
    echo "Email - правильный!";
}

UPD: Ещё один изящный пример (только php5) мне посоветовал Иван:

if(filter_var($email, FILTER_VALIDATE_EMAIL)!==false){
    echo "Email - правильный!";
}

Проверка на правильность email: 10 комментариев

  1. altesack Автор записи

    @ Иван:
    Вот это примерчик!! Спасибище!
    Обязательно в шпаргалку!

  2. V.exeR

    А как же точка в части до «собаки»? У меня на мейле, например, такое мыло. И на Гугле нередко делают вида «имя.фамилия@gmail.com»

  3. altesack Автор записи

    @ V.exeR:
    Сколько лет сколько зим!!
    По поводу точки — у меня большие проблемы с регулярками, к моему стыду. Никак не могу до конца разобраться с ними.

    У тебя другая регулярка?

  4. V.exeR

    Да времени — сам понимаешь…

    Я тоже не очень разбираюсь, но вот тебе разбор шаблона:
    [0-9a-z_]+ — любые символы из квадратных скобок (0-9, a-z и подчеркивание), в любом количестве. Точки и тире среди них нет. Равно как и больших символов, то есть перед проверкой надо сделать lowercase.
    @ — «собака», с этим понятно
    [0-9a-z_\-^\.]+ — тут набор получше: 0-9, a-z, подчеркивание и тире. Особо подчеркнуто, что «не включая точку» (^\.)
    \. — точка
    [a-z]{2,3} — два или три символа из множества a-z.

    Примечение: точка, тире и другие служебные символы, если их надо вставить в явном виде, экранируются обратным слешем.

  5. virua

    Домены на национальном языке, в том числе и кириллические, не поддерживаются.

    <?php

    // $email = "test@domain.com";
    $email = "admin@домен.рф";

    if(filter_var($email, FILTER_VALIDATE_EMAIL)!==false){
    echo "Email is correct!";
    }else{
    echo "Email is not correct!";
    }

    // Output: Email is not correct!

  6. NosFire

    V.exeR пишет:

    Да времени – сам понимаешь…
    Я тоже не очень разбираюсь, но вот тебе разбор шаблона:
    [0-9a-z_]+ – любые символы из квадратных скобок (0-9, a-z и подчеркивание), в любом количестве. Точки и тире среди них нет. Равно как и больших символов, то есть перед проверкой надо сделать lowercase.
    @ – “собака”, с этим понятно
    [0-9a-z_\-^\.]+ – тут набор получше: 0-9, a-z, подчеркивание и тире. Особо подчеркнуто, что “не включая точку” (^\.)
    \. – точка
    [a-z]{2,3} – два или три символа из множества a-z.
    Примечение: точка, тире и другие служебные символы, если их надо вставить в явном виде, экранируются обратным слешем.

    Тогда уж лучше вместо «[0-9a-z_\-^\.]+» использовать «[\w-\.]+» ну и в конце /ui . Короче и по-моему даже есть эстетическая красота.
    \w — Пройдет валидность A-z и 0-9 (Кстати если хотите задеть регексом верхний и нижний регистр то указывайте [A-z], а не [A-Z][a-z])
    - и \. — тире и точка
    /ui — Нечувствительный к регистру и юникод (хотя в основном это не нужно, но иногда всплывают непонятные косяки и часто из-за этого).

  7. NosFire

    И кстати «[a-z]{2,3}» считаю не корректным для доменов 1 уровня, т.к. есть домены info, mobi и прочее (а так же для локальной почты с длинным доменом 1 уровня, вдруг делается ЦРМ xD )

  8. Арсений

    На самом деле if(preg_match(«/[0-9a-z_]+@[0-9a-z_\-^\.]+\.[a-z]{2,3}/i», $email)){
    echo «Email — правильный!»;
    } — может отправить в помойку вполне валидный e-mail.
    Сам использую filter_var() с тех пор, как нашел его в документации php:)

  9. Troj

    Использую такой регекс:
    /(?P(?P[\w-\.]+)@(?P(?P[a-z-]+)\.(?P[\a-z]{2,}+)))/ui
    Проблем с валидацией мыл никогда не имел, за исключением кириллицы

Комментарии запрещены.