Валидация E-Mail

Опубликовано в QLua

Довольно часто приходится отправлять почту из скриптов 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 адреса, что видно из примера выше. Подмигиваю

Комментарии   

# sfd 03.06.2015 05:54
судя по этому сайту - валидация просто никакая :lol:
# admin 04.06.2015 10:05
В любом из нас спит гений. И с каждым днем всё кpепче…

М. Жванецкий.

Недостаточно прав для комментирования

Архив QLua