Просмотр полной версии : Регулярные выражение
Привет, есть вопрос по регулярным выражением, немогу правильно сформулировать идею, следовательно покажу на примере.
Например нужно проверить ел. почтовый язык
[email protected]
Регулярка к ниму
[^0-9][a-z0-9_]+@[a-z_]*\.[a-z]*
Но если мыло будет
[email protected]
тогда как учесть всё поддоменны и то что корневой домен должен быть в пределах {1,3}?
Примеры на которые регульрное выражение должно совпадать
@freemail.memail.su
@light.mail.corporation.net
и т.д.
Но не должно с
@freemail....memail.su
@light.mail.domenru
@rambler.mail
и т.д.
Есть идеи как это можно реализовать? :rolleyes:
Есть еще грамадный и я предпологаю не ефективный способ
@[a-z_]*((\.)+[a-z]*)+\.([a-z][a-z])|(\2[a-z])$
Вроде подходит, вот только запись будет верна
@freemail....mail.su
как и
@freemail.mail.su
Только
@freemail.mail.com
уже не верно
сейчас распишу по цветам
@[a-z_]*((\.)+[a-z]*)+\.([a-z][a-z])|(\2[a-z])$
@freemail.mail.com
как видите домен com уже не входи в цепочку хотя указано что
([a-z][a-z])|(\2[a-z])
2 либо 3 символа и все это являетса окончанием строки
Притом запись вида
@freemail.com и @freemail.ru
уже невходит в цепочку
Как найти оптимальное решение?
LiFeCoSt
01.06.2009, 21:00
я вот такое пользую
if(!eregi("^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+\.[a-zA-Z]{2,4}$",$email)) { непраавильный мыл }
я вот такое пользую
if(!eregi("^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+\.[a-zA-Z]{2,4}$",$email)) { непраавильный мыл }
Проанализировал твой пример и получаетса что твоя регулярка тоже не подходит
так как на запись вида
[email protected]
тоже будет верный вариант, но у нас в начале число и много точек, что в реальном мыле не допустимо :search:
Немного добираюсь до истины
[^0-9][a-z0-9]+@[a-z0-9]+(\.{0,1}[a-z])*
[email protected]..
Лишнии точки не учитывает, но вот корневой домен должен быть от двух до трех символов. Подчеркнутый текст лишний, что нужно еще добавить в регулярку?
LiFeCoSt
01.06.2009, 22:32
скажи сколько ты подуровней хочешь что бы глотало ?
LiFeCoSt
01.06.2009, 22:35
проверил свой в действии:
[email protected] пролазит как правильный
а больше поддоменов я не видел
[^0-9][a-z0-9]+@([a-z0-9]+\.)+[a-z]{2,4}
где-то так
проверил свой в действии:
[email protected] пролазит как правильный
а больше поддоменов я не видел
По твое регулярке там и
[email protected] пролазит
Например kmx.ru там уровень входящих поддоменов не ограничен.
например
[email protected]
З.Ы. Просто хотелось получить оптимальный вариант для проверки региляркой мыла
[^0-9][a-z0-9]+@([a-z0-9]+\.)+[a-z]{2,4}
где-то так
Вот это вариан! Спс ;)
LiFeCoSt
02.06.2009, 13:55
[email protected] через мой тоже пролазило ... )
при наличии тырнета - попробовать запросить MX record :)
при наличии тырнета - попробовать запросить MX record :)
Вы о чем?
шутит он так. пробить домен по днсу имеется ввиду. хотя в каждой шутке, как понимаешь...
вообще кури rfc822 на тему формата мыльного адреса.
и погугли regex test - нугуглиш кучу "проверяльщиков" выражений
...
и погугли regex test - нугуглиш кучу "проверяльщиков" выражений...
Я хотел сам разобратса, в ходе обсуждения темы, я понял где были недочеты, и нашел, самый оптимальный вариант.
sleep-walker
03.06.2009, 09:07
Я вот так писал когда-то:
^[a-z][a-z0-9\.\_\-]{1,15}@([a-z][a-z\_\-]{1,6}\.){1,3}[a-z]{2,3}$
[^0-9][a-z0-9]+@([a-z0-9]+\.)+[a-z]{2,4}
где-то так
[email protected] не проходит
У каждого свой вариант [a-z\d][a-z\d_.%-]*@([a-z\d][a-z\d-]*\.)+[a-z]{2,4}
Хотя решение уже давно есть:
http://docstore.mik.ua/orelly/perl3/cookbook/ch06_20.htm
Говоря по русски нет ни одного 100% подходящего варианта
Ну понятно что спрашивать DNS это не регексы.
Но у вас же стоит задача валидации мылоадреса.
Вам нужны потом записи типа
[email protected] ?
Если подходят то нафига вообще верифаить ? :)
А если нет, то регексы тогда нафиг и вперед в DNS.
PS. Да, чуть было не забыл. Так вы тока домен пробъете. А вот на юзверя вам
100% варианта вообще никто не даст. Даже SMTP чек.
ИМХО если хочеш реальную валидацию мыла - надо при регистрации отсылать на него письмо со ссылкой для подтверждения. Никакой регексп этого не заменит.
А вот если шибко навороченный регексп не пропуститт действительно существующее мыло - можно и юзера потерять.