Змея / Говнокод #26001 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 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 miwomare, (Updated )

Комментарии (85) RSS

  • class Email:

    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)
    Ответить
      • Ага. Адреса с плюсиками не пройдут (как теперь регистрировать файки?), адреса с минусом не пройдут (vasya-pupkin@mail.ru), адреса на доменах с цифрами не пройдут (довольно популярные e1.ru, 163.com, mail333.com), с минусами тоже (mtu-net.ru), адреса на доменах выше второго уровня не пройдут (yahoo.co.uk), адреса на доменах с Punycode не пройдут.
        Ответить
        • скажи
          ты понимаешь, почему у перла с руби регулярка, так сказать, чуть более многословная?
          Ответить
          • Какое же говно! Для разных языков дали неэквивалентные регулярки.

            RFC учитывает всякие устаревшие форматы, включая возможность отправить e-mail на IP-адрес (domain-literal в RFC), а ещё адрес в уголковых скобках (angle-addr), экранирование символов в local-part. Плюс ещё разные реализации ссылаются на разные версии RFC (822, 2822, 5322).
            Ответить
            • [место для шутки про парсинг адреса на языке рулов одного годного MTA]
              Ответить
              • Проще перечислить, каких символов не должно быть в адресе, чем перечислять, что можно.

                Отбросим поддержку UUCP (цепочка маршрутизаторов почты через !), angle-addr ("Vasiliy Pupkin" <vasya-pupkin@mail.ru>), отправку на айпишник (vasya-pupkin@[169.254.1.1]). Тогда адрес должен содержать ровно один символ @, которым он делится на локальную часть и доменную часть.

                В локальной части нельзя использовать непечатаемые символы (с кодами 0x00-0x20 и 0x7F), кавычки, запятую, точку с запятой и какие-то скобочки. Всё остальное можно разрешить. Кстати, сервер вправе учитывать регистр, поэтому приводить локальную часть к нижнему регистру не надо. Хотя «Граватар» и большинство форумов всё-таки приводят, чтобы затруднить мультоводство (популярные почтовые системы регистр не учитывают).

                Доменная часть должна подчиняться стандартам DNS: разрешены латинские буквы, цифры, минусы и точки. Домен может быть любого уровня, а не только второго. Регистр в доменной части игнорируется.

                Остаётся открытым вопрос о символах за пределами ASCII. В доменной части они могут быть закодированы в Punycode (xn--p1ai, например), а могут быть и не закодированы. Ограничения же локальной части нужно смотреть в RFC.

                Закидайте меня какашками, если что-то наврал.
                Ответить
                • Наверное, разумный подход.
                  Но я бы сделал просто .*@.+ и ниипет.
                  Ответить
                  • Поддерживаю. Единственный правильный способ валидировать и-мейл — это послать на него письмо-подтверждение.
                    Ответить
                  • Это, пожалуй, лучше, чем по ошибке отклонить валидный е-мейл.

                    Только потом при использовании (если на него нужно что-то отправлять) придётся проверить, чтобы никакой символ не сыграл роль разделителя. Ну, например, адрес вставляется в поле To:, а там запятая служит разделителем элементов списка.
                    Ответить
                    • Кому нахуй нужны имелы с нелатинскими буквами и неебическими длинами? Мне не приходилось с такими сталкиваться.
                      Ответить
                      • Ну, нелатинские буквы встречаются. Эффективные миллениалы уже вовсю используют домен .рф и чотакова. (а Thunderbird пока не поддерживает)

                        Тут, наверное, достаточно защиты от откровенно неподходящих вариантов, типа "", "ул. Ленина д 12", "ааа", "Иванов", "vk.com/ivanof69"...
                        Ответить
                        • Но как же тогда быть если запись на путинг за 200 руб. по почте mailto:яватный@хуйвжопе.рф?
                          Ответить
                          • Зайти через веб-интерфейс. Если и там не поддерживает, завести другой ящик.
                            Ответить
                        • А когда я регаюсь где-то, я должен указывать домен русскими буквами, или xn--nemyx.xn--koko?
                          Ответить
                          • Зависит от того, как хорошо почтовый клиент этого "где-то" всё это поддерживает.
                            Ответить
                          • Попробовать и так, и так, оба раза поймать невнятное сообщение об ошибке, потому что где-то валидируют домен по регулярке, случайно найденной на Stackoverflow.

                            Хороший сервис должен сам сконвертировать домен в Punycode, если требуется.
                            Ответить
            • Особенно порадовал вариант для MSSQL. Домен Камеруна или Колумбии? Не может быть! Наверняка опечатка, а автор имел в виду точка-ком.
              Ответить
              • Камерун просто это особый случай, его надо хардкодить, как hack про перееезд berkely.cs.edu в одном MTA

                Кстати, о камеруне. Как там с погодой?
                Ответить
                • Почему Камерун — особый случай? Ты поддерживаешь расистов? Может быть, ещё сексистов поддерживаешь, которые обо всех пользователях сайтов пишут в мужском роде?
                  Ответить
                  • Макака -- отличный феминитив
                    И говнокодерка тоже
                    Ответить
                      • Шутки у спермобаков ожидаемо тупые.
                        Мудло не нужно
                        Ответить
                            • >Kirill Katrovsky
                              >От нехватки секса можно закончить курсы по Python

                              Вот именно. Других причин изучать скриптовый язык в 21 веке нет
                              Ответить
                                  • >че-то на питоне похоже одни дауны пишут
                                    есть малёха
                                    Ответить
                                  • golang это язык программирования
                                    а "go" это итти по английски
                                    Ответить
                                      • го это милениалы так говорят, когда куда-то зовут

                                        типа "го бухать"
                                        Ответить
                                          • Пайк, старина, какими судьбами?
                                            Ответить
                                        • > милениалы так говорят
                                          Неправда, как минимум я так не говорю, зато видал как старперы за 30 так говорят.
                                          Ответить
                                    • Если бы я хотел сделать язык, который не гуглится, я бы называл его

                                      "-a"
                                      Ответить
                                      • Есть алгоритм «A*». Чтобы его нагуглить или наяндексить, нужно в начало запроса добавить восклицательный знак.
                                        Ответить
                                          • ! означает искать именно в такой форме, не склоняя, не спрягая, не заменяя синонимами. В общем, выключить искусственного идиота.
                                            Ответить
                                          • Хотя сейчас что-то не получается (и «Гугл», и «Яндекс» выдают много мусора). Раньше работало.

                                            Похоже, что алгоритм сделали более вореционным. Совсем пользователей за дебилов считают.
                                            Ответить
                                            • Что-то я не нашел у них восклисательного знака в языке запросов, походу убрали.
                                              Ответить
                                              • У «Duckduckgo» восклицательный знак означает перейти на закладку. Закладка «!a» ведёт на «Amazon», например.

                                                Хелпа у них не нашёл. Вместо хелпа у этих петухов 100500 страниц с рекламой «приватности».
                                                Ответить
                                      • guest8, а ты видел регекспы на "PHP"? Это же лютая дичь 2019 - все еще нет юникода.
                                        Ответить
                                        • лол, у меня утф даже в перле работает

                                          #!/usr/bin/perl -w
                                          use open ':std', ':encoding(UTF-8)';
                                          use strict;
                                          use warnings;
                                          use feature 'unicode_strings';
                                          use utf8;
                                          
                                          my @users = qw(Лоханкин Тыр-тыр-Митя ТИМОШЕНКО Грицко Кравчук Ураевич);
                                          
                                          my @ukrainians = grep /(ко|чук)$/i, @users;
                                          printf "Українці: %s\n", join ", ", @ukrainians;
                                          Ответить
                            • Какой пиздец. Бесят дебилы, не ставящие знаки препинания.
                              Ответить
                              • Да, этот тот еще адок. После него голову изнутри нужно с мылом помыть.

                                И весь ваш вконтакт состоит из этого на 98% же
                                Ответить
                              • Ахах, один даже точку ставит в конце каждого предложения, даже вопросительного. Через пробел правда.
                                Ответить
                            • Есть такое же, но только "успешные" разговоры?
                              Ответить
                            • Короче хуйня какая-то. Нахуй я это читаю? Тупая школота разводит истерику только для того, чтобы потом выложить в этот паблик. Нормальные люди бы просто послали нахуй и добавили в игнор.
                              Ответить
  • Сама задача -- говно.
    Если есть на свете ад для программистов, то они там день-деньской парсят произвольный HTML регулярками
    Ответить
    • Не тут html заранее задан (только img тэги и только с сокращением /> )
      Ответить
      • так а где гарантия, что они завтра не поменяются?
        Ответить
          • вчера поменяется, гарантия - сегодня
            сегодня поменяется, гарантия - завтра
            Ответить
          • Плюсану человека. Часто можно обойтись и регулярками. Ад - это когда нужна многоуровневая структура, типа списка словарей.
            Ответить
    • Да, HTML лучше парсить специальной библиотекой для XML/SGML, которая представит его в виде DOM или предоставит поиск элементов через XPath или через CSS-селекторы.

      Парсить HTML вручную имеет смысл, только если для библиотеки XML не хватает памяти или если файл испорчен (недокачан, незакрытые теги — вот это всё). Да и в этом случае лучше не регуляркой, а пройти простым циклом.
      Ответить
  • >Говно или нет?
    > import re
    Говно.

    Импорты через запятую, между функциями одна строка, индентация табами — читать PEP8, быстро, решительно!
    Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8