Найти - Пользователи
Полная версия: как проверить переменную "name" на запрещенные символы?
Начало » Python для новичков » как проверить переменную "name" на запрещенные символы?
1 2 3
AZJIO
Вот примеры регулярных выражения для проверки мэйлов.
пример 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}
Но пока я изучал эту тему, то сомнений у меня было всё больше, чтобы как бы не заблокировать возможные валидные варианты.
xsay23
Alen
Что скажет на admin@домен.рф или vasya+pupkin@email.com ? А ведь это совершенно корректные почтовые адреса.
В этом случае можно расширить список
az09 = list('abcdefghijklmnopqrstuvwxyz1234567890.-@')
ну плюс к тому этот код чисто для тренровок
надо бы решить еще кое что:
проверить КАЖДЫЙ домен(если их несколько) на наличие дефиса в начале и в конце
AZJIO
Вот примеры регулярных выражения для проверки мэйлов.

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

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

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

Но пока я изучал эту тему, то сомнений у меня было всё больше, чтобы как бы не заблокировать возможные валидные варианты.
вот это уже интересно, спасибо за расширение кругозора
Alen
Парсинг 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, правда на большинстве серверов эта команда отключена, можно эмулировать сессию отправки почты и не отправлять, но это будет работать только один раз, потому как все приличные сервера после такого запишут вас в спамеры.
AZJIO
xsay23
вот это уже интересно
Но тут нет вывода ошибок ввода пользователю. А вообще я находил темы, где подробно был спор за каждую букву. Тут скорее всего лучше делать по максимально доступному, чем заблокировать кому то доступ.

Обязательно нужно нижнее подчёркивания “_”, а то 20% мэйлов точно заблокируешь.
xsay23
AZJIO
xsay23
Вывод ошибок задача второго плана.
Цель такова:
в итоге получить правильное мыло
а ошибки можно вывести и не церемонясь
просто print('Ошибка')
в любом случае при повторном наборе будут внимательней
AZJIO
xsay23
Глядя на второй пример, показыват, что первый символ не должен быть точкой, тире, подчёркиванием (.-_). А вообще на сколько важно проверят валидность мэйла так тщательно? Ну в итоге какие то всё равно останутся доступны, а какие-то заблокирует. Может быть просто некоторые сто-процентные обязаловки проверить, а остальное допустить.
Budulianin
AZJIO
пхп вында апаш, не более.
Alen
xsay23
Цель такова:
в итоге получить правильное мыло
а ошибки можно вывести и не церемонясь
просто print('Ошибка')
в любом случае при повторном наборе будут внимательней

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

Компактных регулярных выражений не получится. Регулярные выражения ничего не скажут вам о существование email. Ну а сама цель: “print при ошибке”, не имеет практического применения.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB