[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проверка e-mail
yok
Всем ЗДРАСТЕ.
Такое дело, задача проверить email на корректность.
Полазил по форумам, сам проверял регистрироваться, что запрещают там и прочее, и что понял, что конкретно то не особо определена эта задача.
Ну вот например
var_dump(filter_var('_bob@-exa.-mple.-com', FILTER_VALIDATE_EMAIL));
как вы сами видите пхп пропускает такой адрес.
Конечно может особо не стоит заморачиваться, есть собачка, точка. Даже не знаю.
При проверке регулярными выражениями \w пропускает _ и получается что в начале слова может быть _
И нигде о таких ошибках не пишется. Даже не знаю, стоит ли так заморачиваться, просто решил разобраться, раз уж пишу сценарий, а тут вот сколько. И нигде удовлетворяющего ответа не нашел.

Пока вот так
/^[a-z0-9][-.\w]+[a-z0-9]@[a-zA-Z0-9][-\w]+(\.[a-z0-9]\w+)?\.[a-z]{2,7}$/i
Кстати скажи такое может лучше и оно в пхп работает, проверил работает
[a-z0-9][-.\w]+[a-z0-9]@[a-zA-Z0-9][-\w]+(?:\.[a-z0-9]\w+)?\.[a-z]{2,7}$/i
Это же так понимаю лучше - ?:

Хотелось бы услышать замечания.



Спустя 3 минуты, 40 секунд (9.10.2009 - 12:04) glock18 написал(а):
Поиск по сайту юзаем.

Главная проверка при регистрации - активационное письмо. Всегда и везде. Регулярка - помощь не сделать опечатку. За действительно верной регуляркой сходите в гугл, она занимает где-то около страницы (или не одной) сплошного текста.

Спустя 1 час, 12 минут, 10 секунд (9.10.2009 - 13:16) yok написал(а):
Смотрел поиск в том то и дело. и не только на этом форуме.
Конкретных решений не нашел.
А ошибки я отметил.
Стандарт такой не определен. типа POSIX.
точнее чтото есть похожее как говорит qlock18, хотя думаю все описать не нужно код на страницу.
Проверка e-mail это не регистрация.
Спасибо за соображения.

Спустя 7 минут, 35 секунд (9.10.2009 - 13:24) Семён написал(а):
Держи как раз делал класс валидности:
PHP
if(!preg_match("/^(?:[a-z0-9]+(?:[-_.]?[a-z0-9]+)?@[a-z0-9]+(?:\.?[-]?[a-z0-9]+)?\.[a-z]{2,5})$/i",trim($email))) {
                
$valid_email_msg[]['email'] = "Неправильный формат email";
            }

Спустя 1 час, 41 минута, 8 секунд (9.10.2009 - 15:05) yok написал(а):
Вот кстати правильно Семен пишет, \w пропустит то и русские буквы, значит некорректность, и еще момент для Семена домен первого уровня до 6 знаков.
/\.[a-z]{2.6}$/i
http://iana.org/domains/root/db/
максимально .museum .travel

Вобщем логика такая,
для имени первая и последняя буква только буква, внутри -._
для первого уровня /\.[a-z]{2.6}$/i только буквы от 2 до 6 , по ссылке все видно.
для второго и третьего уровня, думаю четвертый это слишком, там только -_, тире и нижнее возможно, так или я ошибаюсь.
Или есть еще какие разрешенные символы.

Спасибо за соображения.

Спустя 15 минут, 41 секунда (9.10.2009 - 15:20) Семён написал(а):
Пример email, я вижу только изъян в .country (ru|com|net) можно написать ru2, но это не изъян, а уже параноя wink.gif

Спустя 2 дня, 18 часов, 6 секунд (12.10.2009 - 09:20) yok написал(а):
Семен, к сожалению твое регулярное пропускает погрешности допустим
den-veb_st@
так же поведет себя и в хосте.

if(preg_match("/^[a-z0-9][-._a-z]+[a-z0-9]@[a-z0-9][-_a-z]+[a-z0-9](?:\.[a-z0-9][-_a-z0-9]+[a-z0-9])?\.[a-z]{2,6}$/i",$mail,$matches)) {
Вот помоему и более ничего не надо.
имя пользователя должно с буквы начинаться и заканчиваться, в хосте тоже, домен первого уровня только буквы до 6, и \w здесь не возможно применять.

Если есть замечания буду рад услышать.

Спустя 1 минута (12.10.2009 - 09:21) yok написал(а):
Поправлюсь, Семен, твое выражение не пропускает den-veb_st@

Спустя 11 минут, 27 секунд (12.10.2009 - 09:33) olgatcpip написал(а):
я такую функцию использую
PHP
function checkEmailFormat($str)
{
        return 
preg_match("/^[0-9A-Za-z_\-\.]+@([0-9A-Za-z\-\_]{1,}\.)+[A-Za-z]{2,4}$/i",$str);
}

Спустя 3 минуты, 49 секунд (12.10.2009 - 09:37) yok написал(а):
Вот и сам увидил еще момент
правильней вот
PHP
if(preg_match("/^[a-z0-9](?:[-\._a-z]+[a-z0-9])?@[a-z0-9][-_a-z]+[a-z0-9](?:\.[a-z0-9][-_a-z0-9]+[a-z0-9])?\.[a-z]{2,6}$/i",$mail,$matches))    {

biggrin.gif

Olgatcpip у тебя /i поэтому A-Z нет необходимости, это первое, всетаки корректность а твое выражение не отвечает многим требованиям.


_____________
Достучаться до небес.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.