w+([\.-][\w-]+@(\w{2,}|\w+(\.\w[\w-]*)\.[A-Za-z]{2,4} А Как вам такое мыло?
a@__________________________.az
/* Проверка строки - правильное ли это мыло,или глаза щипит?
Немного истории - мыло состоит из трех частей...
имя, разделитель, домен
Имя может состоять из букв и цифр.
Первый символ имени всегда был буквой...
второй и последующий- буквой,цифрой, или чем-либо из".[]-_$!# Последний (ну, может он и второй) - буквой или цифрой...
Разделитель состоит из одного символа ;) - комЭТа
Домен... все просто - домены выше первого уровня могут состоять
из букв, цифр символов []_-= и разделяются точкой
Домен первого уровня может быть одним из общественных - ну, списочек известен
или набором латинских букв длинной в два символа - кодом страны.
Коды стран тоже общедоступны, но стоит ли их впендюривать в проверку, если их очень много? в любом введь случае можно написать my@domain.com и мыло будет неверным, несмотря на синтаксис )*/
function IsValidEmail($string) {
// пустая строка - неправильная.
if ($string==""|$string == NULL) return false;
if(!eregi('^([a-zA-Z])+(([][\-\$=!_.])*([a-zA-Z0-9])+)+' // имя
.'@'.'(([a-zA-Z0-9_\-=]+)\.)+' // домены 2...n уровня
.'(com|edu|gov|mil|net|org|info|[a-zA-Z]{2})$' // домен домены первого уровня
,$string)) {
return false;
} else {
return true;
}
}
---
Не везде согласен28.07.05 02:18 Автор: Heller <Heller> Статус: Elderman Отредактировано 28.07.05 02:20 Количество правок: 1
> w+([\.-][\w-]+@(\w{2,}|\w+(\.\w[\w-]*)\.[A-Za- > z]{2,4} > А Как вам такое мыло? > a@__________________________.az Ну, теоретически-то оно может существовать, насколько я понимаю (если закрыть глаза на домен az).
> Первый символ имени всегда был буквой... > второй и последующий- буквой,цифрой, или чем-либо из >".[]-_$!# Ни разу такого не видел, если честно, ну да ладно. Добавлю - хуже не будет.
> Домен... все просто - домены выше первого уровня могут > состоять > из букв, цифр символов []_-= и разделяются точкой Аналогично.
> Коды стран тоже общедоступны, но стоит ли их впендюривать в > проверку, если их очень много? в любом введь случае можно > написать my@domain.com и мыло будет неверным, несмотря на > синтаксис )*/ Здесь поддержу HandleX'а. Доменов первого уровня расплодилось до кучи: museum, name, aero, coop, pro, int, скоро планируется ввести mobi. Кстати, museum состоит аж из шести символов, так что лучше, думаю, проверять домен первого уровня как ([a-zA-Z]{2,4}|museum).
>(!eregi('^([a-zA-Z])+(([][\-\$=!_.])*([a-zA-Z0-9])+)+' //
> имя Адрес e-mail вполне может начинаться с цифры или символа подчёркивания (вроде бы).
Ещё не совсем понятна конструкция "[]". Может в PHP оно что-то значит, но я сам на Perl'е пишу, а там это можно трактовать только как пустой шаблон.
> .'@'.'(([a-zA-Z0-9_\-=]+)\.)+' // домены > 2...n уровня ИМХО мой первоначальный вариант несколько более продуман - такой regexp запросто пропустит домен вроде "=-".
C подчеркиванием вначале и доменами 1-го уровня - согласен -- я слишком строг. А закрывающаяся скобка сразу после открывающейся ([]) -- это просто первый символ, используемый в наборе символа (т.е. он не трактуется как служебный, а юзается в проверке).03.08.05 21:15 Автор: kstati <Евгений Борисов> Статус: Elderman
А домены первого уровня .biz, .xxx — как с ними? ;-) Имхо, не стоит домены жёстко прописывать в коде, мир не стоит на месте.26.07.05 08:13 Автор: HandleX <Александр М.> Статус: The Elderman Отредактировано 26.07.05 08:14 Количество правок: 2