Найти - Пользователи
Полная версия: Проверка валидности email без сторонних модулей.
Начало » Python для экспертов » Проверка валидности email без сторонних модулей.
1
lavrton
Добрый день. Встала такая задача: нужно распарсить входную строку - найти в ней email адреса.
Специфика такова, что код выполняется в окружении, где особая политика безопасности и НИ ОДИН модуль импортировать нельзя.
Парсить получается, но иногда бывают проблемы.
Может где встречали код: как можно проверить строку с email адресом на валидность? Использовать можно только встроенные функции: strip, split, и т.д.
FishHook
Можно выдернуть из Django
class RegexValidator(object):
    regex = ''
    message = _(u'Enter a valid value.')
    code = 'invalid'
    def __init__(self, regex=None, message=None, code=None):
        if regex is not None:
            self.regex = regex
        if message is not None:
            self.message = message
        if code is not None:
            self.code = code
        # Compile the regex if it was not passed pre-compiled.
        if isinstance(self.regex, basestring):
            self.regex = re.compile(self.regex)
    def __call__(self, value):
        """
        Validates that the input matches the regular expression.
        """
        if not self.regex.search(smart_unicode(value)):
            raise ValidationError(self.message, code=self.code)
class EmailValidator(RegexValidator):
    def __call__(self, value):
        try:
            super(EmailValidator, self).__call__(value)
        except ValidationError, e:
            # Trivial case failed. Try for possible IDN domain-part
            if value and u'@' in value:
                parts = value.split(u'@')
                try:
                    parts[-1] = parts[-1].encode('idna')
                except UnicodeError:
                    raise e
                super(EmailValidator, self).__call__(u'@'.join(parts))
            else:
                raise
email_re = re.compile(
    r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*"  # dot-atom
    # quoted-string, see also http://tools.ietf.org/html/rfc2822#section-3.2.5
    r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"'
    r')@((?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?$)'  # domain
    r'|\[(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}\]$', re.IGNORECASE)  # literal form, ipv4 address (SMTP 4.1.3)
validate_email = EmailValidator(email_re, _(u'Enter a valid e-mail address.'), 'invalid')
Ed
Если не нашли ничего питонового, то возьмите какой-нибудь сишный парсер и перепишите на Питоне. Ну, например, этот: http://www.oreillynet.com/network/excerpt/spcookbook_chap03/index3.html. Второй вариант - положите код питоновых библиотек, которых не хватает к себе в модуль и юзайте без импорта.
Ed
FishHook
Можно выдернуть из Django
Это не катит. Здесь нужно будет импортировать re.
FishHook
Ed
FishHook
Можно выдернуть из Django
Это не катит. Здесь нужно будет импортировать re.
А он небольшой сам модуль то. Ты его не импортируй, ты его в проект включи, обзови my_re и юзай с наздоровье (ну и зависимости естественно тоже)
Ed
Если у них такая параноя, то это не прокатит. Непонятно правда зачем тогда на Питоне это писать, если так извращаться нужно. Проще тогда уже на Си. Кода ненамного больше, а быстрее будет в десятки раз.
py.user.next
lavrton
Может где встречали код: как можно проверить строку с email адресом на валидность?
нужен конечный автомат
wiki. конечный автомат
пример

ещё инфа
конечный автомат
конечный автомат в лексическом анализе
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