tgoop.com/AsForJavaScript/754
Last Update:
О валидации email адреса.
Короткий ответ
При помощи одного регулярного выражения, провести валидацию EMail, в соответствии с текущим стандартом RFC - невозможно.
Потребуется написать конечный автомат, где вы будете использовать несколько регулярных выражений как описание поведение конечного автомата.
Исключение PCRE регулярные выражения, которых нет в JS.
Длинный ответ или, а что делать
Сначала спросить себя - а зачем мне это надо?
Ответов может быть два:
1) я пишу свой smtp севрер
2) я решаю задачу, которая связанна с например фронтендом, где я хочу уберечь пользователя от ошибок при вводе емаил.
В случае 1 - у Вас нет выбора. Вы обязаны реализовывать всю спецификацию RFC для EMail адресов.
Замечу, что даже сейчас не все сервера это умеют делать.
В случае 2 - стандартным решением сейчас является:
либо использование html5 input type email
либо использование какого либо очень простого алгоритма, который покрывает большинство кейсов связанных с типичными ошибками пользователя. Например просто на наличие символа @ в строке. Или на набор типичных опечаток - в конце строки есть gmail а точки перед ним нет. Где-то есть даже такой проект с набором типичных очепаток.
После чего на серверной части происходит отправка письма, на частично валидированный EMail.
Те кто хочет большей интерактивности, на сервере делает запрос к SMTP серверу формируя отправку и на момент передачи адреса контролируют ответ, который может содержать сообщение о ошибке. Чего достаточно для того чтобы вернуть ответ о невалидном EMail.
Другим способом является какой нибудь элемент интереактивности, который требует повтого ввода email. С запретом на копи пейст и последующим сравнением обоих строк.
О чем следует помнить
1) Валидация EMail согласно современному RFC чрезвычайно сложный не тривиальный механизм.
2) Адрес может содержать практически все символы стандарта UNICODE в том числе и региональные (иероглифы, быть написаным справа налево и т.д.)
3) Не нужно делать лишнюю работу, когда это уже сделали за вас (работающий smtp сервер). Пользуйтесь им, если Вам нужна максимальная интерактивность. Реализация протокола взаимодействия с SMTP сервером очень простая задача.
4) Познакомьтесь с input type email
Вместо ИГОГО
Если задача валидации продиктована необходимостью взаимодейтсвовать с пользователем, то наиболее корректным и простым решением является - самый простой из возможной алгоритмов контроля введенной информации на клиенте, которая реагирует вопросм - проверьте все ли корректно и если уверены - нажмите да.
Плюс отправка письма с этим "частично валидированным" EMail
Для максимальной интерактивности, серверная часть, взаимодейтсвует с SMTP сервером формируя фейковую отправку и на этапе отправке адресата контролирует корректность ответа. SMTP сервер может быть настроен таким образом что он ничего не ответит а примет любой адрес. Но чаще всего есть ответ о корректности, особенно если это локальный SMTP сервер.
Либо мониторим логи SMTP сервера на предмет лупбека от внешнего сервера с ошибкой.
При этом прямое взаимодейтсвие с SMTP сервером потребует много меньше ресурсов.
BY As For JS

Share with your friend now:
tgoop.com/AsForJavaScript/754