Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > RegExp > регулярное выражение для валидности email |
Автор: HighMan 15.12.14, 18:48 |
Здравствуйте, Господа! Я в регулярках совсем темный, но встала задачка проверять вводимый email на валидность. Тема избитая со страшной силой, однако, толкового решения не увидел, кроме проверки на наличие '@' в строке В общем, поковырял я инет и... Если хочешь хорошо - сделай сам! <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> /\w+_*-*\.?\w+@\w+_?\.*-?\w*\.?\w*\.\w{2,9}/ Это мое изобретение. Можете что-то предложить для оптимизации, но без существенного усложнения? Разумеется, на панацею не претендую. Нас избавила от панацеи RFC822. Впрочем... решение предложено! Честно скажу: не обладая некоторым опытом сообразить что-то стоящее, чертовски тяжело! Для упрощения разработки сделал onlain калькулятор для регулярок. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> <!doctype html> <html> <head> <meta charset="windows-1251"> <title>Online regexp</title> </head> <body> <form name="calc"> <table> <tr><td>Исходная строка</td><td> </td><td><input type="text" name="source" size="50" value="12345.67"/></td></tr> <tr><td>Регулярное выражение</td><td>/</td><td><input type="text" name="rege" size="50" value="[0-9]+\.?[0-9]{1,4}"/>/</td></tr> <tr><td>Результат</td><td colspan="2"><input type="text" name="result" size="50" disabled/></td></tr> <tr><td colspan="3"align="center"><a href="#" onClick="calculate()">Применить</a></td></tr> </table> </form> <script> function calculate() { var src = document.forms[0].elements[0].value; var reg = document.forms[0].elements[1].value; //Получили значения полей reg = new RegExp(reg); src=reg.exec(src); document.forms[0].elements[2].value = src; } </script> </body> </html> Код скопипастен с моей рабочей странички. Работает. Может кому-то поможет. Опять же. Сие - рабочая лошадка. Оптимизацией не занимался, да и в javascript я новичок. Так что просьба - сильно не пинать. PS Редактировал, т.к. обнаружил очерпятки в коде. На работу они не влиляли, но впечатление портили |
Автор: AVA12 16.12.14, 10:33 |
Трудолюбивые извращенцы портируют DOOM на калькуляторы, пишут 3D-шутеры весом 95 КБ, играют музыку на флоповодах. Ленивые пытаются решить любую проблему с помощью регулярки. Автор, ты своим "изобретением" сразу отсекаешь множество потенциальных посетителей. Например, отсечется вполне валидный j-r-doe+another_stupid_site@e-mail.my-site.foundation. И это еще без учета punicode и нелатинских доменных имен. |
Автор: Pacific 16.12.14, 10:46 |
Достаточно наличия @, с остальным разберется почтовый сервер. Лучше послать пару мейлов на несуществующие адреса, чем отсекать валидные. |
Автор: HighMan 16.12.14, 11:56 |
Цитата AVA12 @ Автор, ты своим "изобретением" сразу отсекаешь множество потенциальных посетителей. Например, отсечется вполне валидный j-r-doe+another_stupid_site@e-mail.my-site.foundation. И это еще без учета punicode и нелатинских доменных имен. Я выше писал, что добиться идеальной валидности не реально. Приходится выбирать: или проверять наличие @, или жертвовать некоторым кол-вом случайных посетителей. Я консерватор. Мне топор палача намного ближе либеральных ценностей. Этот "валидатор" пишу для сайта с не гигантской посещаемостью. Скорее всего, случайных людей на нем будет совсем не много. Даже сам сайт, скорее, как визитная карточка, нежели, рабочий инструмент. Вот потому и можно отсекать не жалеючи. В самом деле, мне как-то трудно воспринимать письма из зон .рф, .biz и прочую шалупонь. Почтовый сервер настроен сразу таких откидывать. 90% писем отсекаются по BlackList и зонам. И знаете что интересно? Всех, на работе, это устраивает! Так что пусть, валидные по RFS822, j-r-doe+another_stupid_site@e-mail.my-site.foundation идут лесом. Пусть не мешают нормальным людям работать, а занимаются распостранением спама, порно и виагры. Кесарю - кесарево. |
Автор: AVA12 16.12.14, 13:10 |
Конечно, мой пример почтового адреса слишком утрирован, но возможны и более простые, честные варианты, которые "продвинутый" регвыр не пропустит. Например, некоторые почтовые сервера допускают адреса вида логин+тег@домен, что дает клиентам дополнительные возможности для фильтрации писем. Я вполне допускаю мысль, что у автора темы некоммерческий сайт, который требует огромных затрат и уже не справляется с потоком пользователей, так что автор вполне может диктовать посетителям, какие почтовые сервисы им использовать и как именно. Но все равно - некультурно как-то. |
Автор: Serafim 16.12.14, 22:06 |
Цитата Pacific @ Достаточно наличия @, с остальным разберется почтовый сервер. Лучше послать пару мейлов на несуществующие адреса, чем отсекать валидные. +1 Цитата /.*?@.*?/ Добавлено Цитата HighMan @ j-r-doe+another_stupid_site@e-mail.my-site.foundation идут лесом. Пусть не мешают нормальным людям работать, а занимаются распостранением спама, порно и виагры. Кесарю - кесарево. если у меня почта kirill-nesmeyanov@sources.forum, я спамер? |