Форум сайта python.su
1
Добрый день. Встала такая задача: нужно распарсить входную строку - найти в ней email адреса.
Специфика такова, что код выполняется в окружении, где особая политика безопасности и НИ ОДИН модуль импортировать нельзя.
Парсить получается, но иногда бывают проблемы.
Может где встречали код: как можно проверить строку с email адресом на валидность? Использовать можно только встроенные функции: strip, split, и т.д.
Отредактировано lavrton (Июнь 9, 2012 14:16:02)
Офлайн
568
Можно выдернуть из 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')
Офлайн
13
Если не нашли ничего питонового, то возьмите какой-нибудь сишный парсер и перепишите на Питоне. Ну, например, этот: http://www.oreillynet.com/network/excerpt/spcookbook_chap03/index3.html. Второй вариант - положите код питоновых библиотек, которых не хватает к себе в модуль и юзайте без импорта.
Офлайн
13
FishHookЭто не катит. Здесь нужно будет импортировать re.
Можно выдернуть из Django
Офлайн
568
EdА он небольшой сам модуль то. Ты его не импортируй, ты его в проект включи, обзови my_re и юзай с наздоровье (ну и зависимости естественно тоже)FishHookЭто не катит. Здесь нужно будет импортировать re.
Можно выдернуть из Django
Офлайн
13
Если у них такая параноя, то это не прокатит. Непонятно правда зачем тогда на Питоне это писать, если так извращаться нужно. Проще тогда уже на Си. Кода ненамного больше, а быстрее будет в десятки раз.
Офлайн
857
lavrtonнужен конечный автомат
Может где встречали код: как можно проверить строку с email адресом на валидность?
Отредактировано py.user.next (Июнь 10, 2012 11:17:40)
Офлайн