Валидация E-Mail
Довольно часто приходится отправлять почту из скриптов Lua. В связи с этим появляется необходимость проверки правильности указания электронного адреса из Lua.
Погуглив, нашел несколько вариантов, написанных на Lua. Все что попалось на глаза, в чистом виде не устроило. В основном по причине крайне малого удовлетворения RFC стандарту. Пришлось слегка напрячь глаза и родить вот такое чудо:
-- Проверка допустимости e-mail адреса
-- В случае недопустимого адреса возвращается nil
function string.is_email_valid(e_mail)
return string.match(e_mail,"^%a[%w,%.%%_%+%-%!#&%$%*'=%^%?\\^%{%[%|%}%]~\"%(%)`%/]*@[%w%.%%_%+%-]+%.%w%w%w?%w?$")
end
Проверим:
addresses = {
-- легальные адреса
"Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.",
"Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.",
"Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.",
"Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.",
"other.email=with#strange(symbols)@example.com",
-- недопустимые адреса
"Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.",
"Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.",
"Abc.example.com",
"A@b@Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.",
"a\"b(c)d,e:f;g<h>i[j\\k]Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.",
"email@brazil.b"
}
for n,address in ipairs(addresses) do
print (address .. " " .. (string.is_email_valid(address) and "TRUE" or "FALSE") .. "\r")
end
Результат:
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | TRUE |
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | TRUE |
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | TRUE |
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | TRUE |
other.email=with#strange(symbols)@example.com | TRUE |
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | FALSE |
Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | FALSE |
Abc.example.com | FALSE |
A@b@Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | FALSE |
a"b(c)d,e:f;g<h>i[j\k]Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | FALSE |
email@brazil.b | FALSE |
Паттерн, фигурирующий здесь, также покрывает не весь стандарт. Больная фантазия может материализовать настолько умопомрачительные легальные почтовые адреса, что можно диву даться. Вот пример, который является допустимым:
"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com
Разбирать такого рода почтовые адреса я точно никогда не буду. Очень хочется посмотреть на персонажа, который заведет себе такой адрес. Истины ради следует отменить, что встроенный в html распознаватель ссылок тоже не всегда правильно распознаёт email адреса, что видно из примера выше.
М. Жванецкий.
RSS лента комментариев этой записи