- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
import re, copy, json
config = {}
def domain_mapper(domain):
def injector(f):
if domain not in config:
config[domain] = []
config[domain].append(f)
return injector
def default(f):
config['default'] = [f]
return f
@domain_mapper("gmail.com")
@default
def google_filter(content):
regex = r"([^\!\?\.]*?offer.*?[\!\?\.])"
repl = r""
return re.sub(regex, repl, content, re.M)
@domain_mapper("gmail.com")
def another_google_filter(content):
return content
@domain_mapper("yandex.ru")
def yandex_filter(content):
regex = r"<img src=[\"'](.+?)[\"'].*/>"
repl = r"\1"
return re.sub(regex, repl, content, re.M)
@domain_mapper("mail.ru")
def mail_filter(content):
regex = r"<img src=[\"'](.+?)\.gif[\"'].*/>"
repl = r"<img src='\1.png'/>"
return re.sub(regex, repl, content, re.M)
miwomare 28.10.2019 19:27 # 0
def __init__(self, email, message):
self.email = email
self.message = message
def send(self):
for fltr in self.find_filter():
self.message = fltr(self.message)
return self
def find_filter(self):
fltr = None
matches = re.match(r"[0-9a-zA-Z\.]+@([a-z]+\.[a-z]+)", self.email)
if not matches: raise Exception("Invalid email addr")
domain = matches.group(1)
# 'default' домен не пройдет re.match
if domain not in config: return config['default']
return config[domain]
def __str__(self):
return json.dumps(self.__dict__)
def __repr__(self):
return str(self)
MAKAKA 28.10.2019 19:31 # 0
ну такое
http://emailregex.com/
bagrinho 28.10.2019 20:05 # 0
guest8 28.10.2019 20:08 # −999
bagrinho 28.10.2019 20:19 # 0
RFC учитывает всякие устаревшие форматы, включая возможность отправить e-mail на IP-адрес (domain-literal в RFC), а ещё адрес в уголковых скобках (angle-addr), экранирование символов в local-part. Плюс ещё разные реализации ссылаются на разные версии RFC (822, 2822, 5322).
MAKAKA 28.10.2019 20:24 # 0
bagrinho 28.10.2019 21:46 # +1
Отбросим поддержку UUCP (цепочка маршрутизаторов почты через !), angle-addr ("Vasiliy Pupkin" <[email protected]>), отправку на айпишник (vasya-pupkin@[169.254.1.1]). Тогда адрес должен содержать ровно один символ @, которым он делится на локальную часть и доменную часть.
В локальной части нельзя использовать непечатаемые символы (с кодами 0x00-0x20 и 0x7F), кавычки, запятую, точку с запятой и какие-то скобочки. Всё остальное можно разрешить. Кстати, сервер вправе учитывать регистр, поэтому приводить локальную часть к нижнему регистру не надо. Хотя «Граватар» и большинство форумов всё-таки приводят, чтобы затруднить мультоводство (популярные почтовые системы регистр не учитывают).
Доменная часть должна подчиняться стандартам DNS: разрешены латинские буквы, цифры, минусы и точки. Домен может быть любого уровня, а не только второго. Регистр в доменной части игнорируется.
Остаётся открытым вопрос о символах за пределами ASCII. В доменной части они могут быть закодированы в Punycode (xn--p1ai, например), а могут быть и не закодированы. Ограничения же локальной части нужно смотреть в RFC.
Закидайте меня какашками, если что-то наврал.
Steve_Brown 29.10.2019 10:13 # +2
Но я бы сделал просто .*@.+ и ниипет.
gost 29.10.2019 10:20 # 0
bagrinho 29.10.2019 10:20 # 0
Только потом при использовании (если на него нужно что-то отправлять) придётся проверить, чтобы никакой символ не сыграл роль разделителя. Ну, например, адрес вставляется в поле To:, а там запятая служит разделителем элементов списка.
guest8 29.10.2019 10:24 # −999
Steve_Brown 29.10.2019 12:41 # 0
Тут, наверное, достаточно защиты от откровенно неподходящих вариантов, типа "", "ул. Ленина д 12", "ааа", "Иванов", "vk.com/ivanof69"...
Dpyrou_Pycoqpo6_CEMA 29.10.2019 13:07 # +1
Steve_Brown 29.10.2019 14:10 # 0
guest8 29.10.2019 13:23 # −999
Steve_Brown 29.10.2019 14:34 # 0
bagrinho 29.10.2019 14:51 # 0
Хороший сервис должен сам сконвертировать домен в Punycode, если требуется.
govninho 28.10.2019 22:12 # 0
http://emailregex.com/wp-content/uploads/sites/2/2014/06/General-Email-Regex-Railroad-Diagram-emailregex.com_.png
Но не осилили написать по ней регулярку.
MAKAKA 28.10.2019 22:14 # 0
годная рега там только для перла
govninho 28.10.2019 22:15 # 0
MAKAKA 28.10.2019 22:18 # 0
Кстати, о камеруне. Как там с погодой?
govninho 28.10.2019 22:21 # 0
guest8 28.10.2019 22:26 # −999
govninho 28.10.2019 22:33 # 0
guest8 28.10.2019 22:34 # −999
XYEMPA3b 28.10.2019 22:45 # 0
guest8 28.10.2019 22:48 # −999
guest8 28.10.2019 22:53 # −999
XYEMPA3b 28.10.2019 23:08 # +1
miwomare 28.10.2019 23:32 # 0
miwomare 28.10.2019 23:08 # 0
miwomare 28.10.2019 23:11 # 0
guest8 28.10.2019 23:13 # −999
guest8 28.10.2019 23:13 # −999
guestinxo 29.10.2019 00:15 # 0
guest8 29.10.2019 00:48 # −999
XYEMPA3b 29.10.2019 00:49 # 0
guest8 29.10.2019 00:57 # −999
guest8 29.10.2019 00:57 # −999
guest8 29.10.2019 00:58 # −999
whois 02.11.2019 21:54 # 0
Неправда, как минимум я так не говорю, зато видал как старперы за 30 так говорят.
miwomare 29.10.2019 01:08 # 0
guest8 29.10.2019 01:09 # −999
bagrinho 29.10.2019 01:11 # 0
guest8 29.10.2019 01:13 # −999
bagrinho 29.10.2019 01:20 # 0
bagrinho 29.10.2019 01:24 # 0
Похоже, что алгоритм сделали более вореционным. Совсем пользователей за дебилов считают.
whois 02.11.2019 21:56 # 0
-__- 02.11.2019 22:31 # 0
guest8 02.11.2019 22:43 # −999
PACTPOBblu_nemyx 02.11.2019 22:51 # 0
Хелпа у них не нашёл. Вместо хелпа у этих петухов 100500 страниц с рекламой «приватности».
guestinxo 29.10.2019 01:23 # 0
guestinxo 29.10.2019 01:23 # 0
guest8 29.10.2019 01:10 # −999
miwomare 29.10.2019 02:04 # 0
guest8 29.10.2019 02:23 # −999
bagrinho 29.10.2019 06:15 # 0
https://www.php.net/manual/ru/reference.pcre.pattern.modifiers.php
whois 02.11.2019 21:57 # 0
Booster 02.11.2019 22:06 # 0
guestinxo 28.10.2019 23:05 # 0
guest8 28.10.2019 23:07 # −999
guestinxo 28.10.2019 23:09 # 0
guest8 28.10.2019 23:06 # −999
guestinxo 28.10.2019 23:15 # 0
guest8 28.10.2019 23:24 # −999
guest8 29.10.2019 01:28 # −999
guest8 28.10.2019 20:14 # −999
MAKAKA 28.10.2019 19:30 # +3
Если есть на свете ад для программистов, то они там день-деньской парсят произвольный HTML регулярками
miwomare 28.10.2019 19:55 # 0
guest8 28.10.2019 20:02 # −999
miwomare 28.10.2019 20:33 # 0
nyTuH_nugop 28.10.2019 20:51 # −102
сегодня поменяется, гарантия - завтра
guest8 28.10.2019 21:13 # −999
guest8 29.10.2019 02:29 # −999
bagrinho 28.10.2019 20:00 # 0
Парсить HTML вручную имеет смысл, только если для библиотеки XML не хватает памяти или если файл испорчен (недокачан, незакрытые теги — вот это всё). Да и в этом случае лучше не регуляркой, а пройти простым циклом.
miwomare 28.10.2019 20:04 # 0
guest8 28.10.2019 20:08 # −999
guest8 28.10.2019 21:13 # −999
guest8 28.10.2019 21:14 # −999
miwomare 29.10.2019 01:52 # 0
gost 28.10.2019 20:20 # 0
> import re
Говно.
Импорты через запятую, между функциями одна строка, индентация табами — читать PEP8, быстро, решительно!
MAKAKA 28.10.2019 20:25 # 0
gost 28.10.2019 20:39 # +1
miwomare 28.10.2019 20:30 # 0
miwomare 29.10.2019 01:56 # 0