Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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, я спамер? :)

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)