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