Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 13, 2014 16:35:52

AZJIO
Зарегистрирован: 2014-08-27
Сообщения: 53
Репутация: +  -5  -
Профиль   Отправить e-mail  

как проверить переменную "name" на запрещенные символы?

Вот примеры регулярных выражения для проверки мэйлов.

пример 1
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

пример 2
([a-zA-Z0-9]+[a-zA-Z0-9._-]*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9]+[a-zA-Z0-9_-]*)+)

пример 3
[A-Za-z0-9._-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}
Но пока я изучал эту тему, то сомнений у меня было всё больше, чтобы как бы не заблокировать возможные валидные варианты.



_________________________________________
Python_Examples.7z

Отредактировано AZJIO (Сен. 13, 2014 16:37:51)

Офлайн

#2 Сен. 13, 2014 16:38:40

xsay23
От: Казань
Зарегистрирован: 2014-09-04
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

как проверить переменную "name" на запрещенные символы?

Alen
Что скажет на admin@домен.рф или vasya+pupkin@email.com ? А ведь это совершенно корректные почтовые адреса.
В этом случае можно расширить список
az09 = list('abcdefghijklmnopqrstuvwxyz1234567890.-@')
ну плюс к тому этот код чисто для тренровок
надо бы решить еще кое что:
проверить КАЖДЫЙ домен(если их несколько) на наличие дефиса в начале и в конце
AZJIO
Вот примеры регулярных выражения для проверки мэйлов.

пример 1
+(?:\.+)*@(??:*)?\.)+(?:*)?

пример 2
(+*@+(\.+*)+)

пример 3
+@+\.{2,4}

Но пока я изучал эту тему, то сомнений у меня было всё больше, чтобы как бы не заблокировать возможные валидные варианты.
вот это уже интересно, спасибо за расширение кругозора



python3

Отредактировано xsay23 (Сен. 13, 2014 16:42:20)

Офлайн

#3 Сен. 13, 2014 16:40:44

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

как проверить переменную "name" на запрещенные символы?

Парсинг email занятие неблагодарное. Да и вообще “баян”, можно в интернете найти регуляку в 1500 символов. Поэтому лучше использовать стандартные валидаторы в фреймворках, например в Django. На худой случай, можно проверять существование домена для отправки почты:

import dns.resolver
def check_mx_domain(email):
    try:
        domain = email.split('@')[1]
    except IndexError:
        return False
    if not domain:
        return False
    try:
        answers = dns.resolver.query(domain, 'MX')
        for data in answers:
            if data.exchange:
                return True
    except (dns.resolver.NXDOMAIN, dns.resolver.Timeout, dns.exception.DNSException):
        return False
    return False

Можно еще и существование ящика проверить, для этого в SMTP предусмотрена команда VRFY, правда на большинстве серверов эта команда отключена, можно эмулировать сессию отправки почты и не отправлять, но это будет работать только один раз, потому как все приличные сервера после такого запишут вас в спамеры.

Отредактировано Alen (Сен. 13, 2014 16:42:30)

Офлайн

#4 Сен. 13, 2014 16:46:36

AZJIO
Зарегистрирован: 2014-08-27
Сообщения: 53
Репутация: +  -5  -
Профиль   Отправить e-mail  

как проверить переменную "name" на запрещенные символы?

xsay23

вот это уже интересно
Но тут нет вывода ошибок ввода пользователю. А вообще я находил темы, где подробно был спор за каждую букву. Тут скорее всего лучше делать по максимально доступному, чем заблокировать кому то доступ.

Обязательно нужно нижнее подчёркивания “_”, а то 20% мэйлов точно заблокируешь.



_________________________________________
Python_Examples.7z

Отредактировано AZJIO (Сен. 13, 2014 16:51:39)

Офлайн

#5 Сен. 13, 2014 16:55:39

xsay23
От: Казань
Зарегистрирован: 2014-09-04
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

как проверить переменную "name" на запрещенные символы?

AZJIO
xsay23
Вывод ошибок задача второго плана.
Цель такова:
в итоге получить правильное мыло
а ошибки можно вывести и не церемонясь
просто print('Ошибка')
в любом случае при повторном наборе будут внимательней



python3

Офлайн

#6 Сен. 13, 2014 17:00:02

AZJIO
Зарегистрирован: 2014-08-27
Сообщения: 53
Репутация: +  -5  -
Профиль   Отправить e-mail  

как проверить переменную "name" на запрещенные символы?

xsay23
Глядя на второй пример, показыват, что первый символ не должен быть точкой, тире, подчёркиванием (.-_). А вообще на сколько важно проверят валидность мэйла так тщательно? Ну в итоге какие то всё равно останутся доступны, а какие-то заблокирует. Может быть просто некоторые сто-процентные обязаловки проверить, а остальное допустить.



_________________________________________
Python_Examples.7z

Отредактировано AZJIO (Сен. 13, 2014 17:00:43)

Офлайн

#7 Сен. 13, 2014 17:12:57

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

как проверить переменную "name" на запрещенные символы?

AZJIO
пхп вында апаш, не более.



Офлайн

#8 Сен. 13, 2014 17:25:29

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

как проверить переменную "name" на запрещенные символы?

xsay23
Цель такова:
в итоге получить правильное мыло
а ошибки можно вывести и не церемонясь
просто print('Ошибка')
в любом случае при повторном наборе будут внимательней

Ну тогда не имеет значение, какие Вы будете делать проверки, всё равно код сразу выкидывать.

Офлайн

#9 Сен. 13, 2014 17:31:48

xsay23
От: Казань
Зарегистрирован: 2014-09-04
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

как проверить переменную "name" на запрещенные символы?

Alen
Ну тогда не имеет значение, какие Вы будете делать проверки, всё равно код сразу выкидывать.
согласен, все это заменит компактные регулярные выражения



python3

Офлайн

#10 Сен. 13, 2014 17:39:26

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

как проверить переменную "name" на запрещенные символы?

xsay23
согласен, все это заменит компактные регулярные выражения

Компактных регулярных выражений не получится. Регулярные выражения ничего не скажут вам о существование email. Ну а сама цель: “print при ошибке”, не имеет практического применения.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version