- 1
- 2
- 3
- 4
if (preg_match(
'@^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+\@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$@',
$email
)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+150
if (preg_match(
'@^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+\@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$@',
$email
)
валидация email-а
inkanus-gray 07.08.2013 21:22 # +4
Итак, в чём здесь говно:
1. Домены первого уровня не поддерживаются, хотя теоретически они могут содержать MX-запись и принимать письма. Почему-то эту возможность упускают едва ли не все валидаторы.
2. Этот валидатор пропустит мусор, которого в доменных именах быть не должно (!#$%'*+\=?^_`{|}~), но не пропустит нелатинские буквы (типа президент.рф). По RFC1034 кроме букв, цифр и знака «минус» в доменах ничего быть не должно (нелатинские буквы допускаются, потому что могут быть закодированы через Punycode).
Тем не менее, не совсем говно:
1. Нет дурацкого ограничения на длину частей, которым грешат многие валидаторы.
2. Нет дурацкого ограничения на формат локальной части (которая перед собакой), ибо RFC2822 допускает для каждого почтового сервера собственный формат имён пользователей.
rdifb0 07.08.2013 21:28 # +8
anonimb84a2f6fd141 07.08.2013 22:11 # −2
I lol'd.
Lowezar 07.08.2013 23:57 # +1
Впрочем, мне тоже частенько приходится писать "своё" потому как заказчик не хочет слышать про RFC и говорит что не бывает восклицательных знаков в адресе. :)
И всё-таки мне интересно откуда родились ограничения на спец-символы и цифры в качестве первого символа на популярных мыльниках.
rdifb0 08.08.2013 00:37 # 0
deep 08.08.2013 05:47 # +2
inkanus-gray 08.08.2013 04:54 # +2
А ограничения на спецсимволы родились оттого, что у некоторых сервисов логин одновременно используется в URL домашней странички владельца. Примеры: В первом примере в имени нежелательно использовать символы, которые в URL нужно экранировать (слэш, знак вопроса, амперсанд, двоеточие), а во втором случае нежелательно использовать символы, недопустимые в доменном имени (и точку тоже, чтобы не создавать домены высоких порядков).
WGH 08.08.2013 03:12 # 0
Один раз я случайно отправил на такой адрес, и получил отказ от сервера. Потом долго выкуривал из автодополнения Thunderbird, которое не давало ввести правильный адрес, настойчиво дописывая точку.
Пруф (RFC 2822):
mailbox = name-addr / addr-spec
addr-spec = local-part "@" domain
domain = dot-atom / domain-literal / obs-domain
obs-domain = atom *("." atom)
atom = [CFWS] 1*atext [CFWS]
domain-literal = [CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS]
dot-atom = [CFWS] dot-atom-text [CFWS]
dot-atom-text = 1*atext *("." 1*atext)
atext = ALPHA / DIGIT / ; Any character except controls,
"!" / "#" / ; SP, and specials.
"$" / "%" / ; Used for atoms
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~"