1. Python / Говнокод #26001

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 28 Октября 2019

    Комментарии (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\.][email protected]([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)
      Ответить
      • >matches = re.match(r"[0-9a-zA-Z\.][email protected]([a-z]+\.[a-z]+)", self.email)
        ну такое
        http://emailregex.com/
        Ответить
        • Ага. Адреса с плюсиками не пройдут (как теперь регистрировать файки?), адреса с минусом не пройдут ([email protected]), адреса на доменах с цифрами не пройдут (довольно популярные 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" <[email protected]>), отправку на айпишник ([email protected][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, если требуется.
                              Ответить
            • Какое же говно сайт emailregex.com! Выложили довольно годную картинку:
              http://emailregex.com/wp-content/uploads/sites/2/2014/06/General-Email-Regex-Railroad-Diagram-emailregex.com_.png

              Но не осилили написать по ней регулярку.
              Ответить
              • +1, говнино

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

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

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

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

                                        "-a"
                                        Ответить
                                        • Есть алгоритм «A*». Чтобы его нагуглить или наяндексить, нужно в начало запроса добавить восклицательный знак.
                                          Ответить
                                          • ахаха
                                            охуенно

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

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

                                                  Хелпа у них не нашёл. Вместо хелпа у этих петухов 100500 страниц с рекламой «приватности».
                                                  Ответить
                                          • A star
                                            Ответить
                                        • Minus a
                                          Ответить
                                      • Именно поэтому я за "PHP".
                                        Ответить
                                        • 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;
                                            Ответить
                                          • Есть. В конец регулярки нужно добавить модификатор u, тогда с UTF-8 работает:
                                            https://www.php.net/manual/ru/reference.pcre.pattern.modifiers.php

                                            /Вот так/u
                                            Ответить
                              • Какой пиздец. Бесят дебилы, не ставящие знаки препинания.
                                Ответить
                                • Да, этот тот еще адок. После него голову изнутри нужно с мылом помыть.

                                  И весь ваш вконтакт состоит из этого на 98% же
                                  Ответить
                                • Ахах, один даже точку ставит в конце каждого предложения, даже вопросительного. Через пробел правда.
                                  Ответить
                              • Есть такое же, но только "успешные" разговоры?
                                Ответить
                              • https://vk.com/wall-127146702_1032470
                                Ответить
                              • Короче хуйня какая-то. Нахуй я это читаю? Тупая школота разводит истерику только для того, чтобы потом выложить в этот паблик. Нормальные люди бы просто послали нахуй и добавили в игнор.
                                Ответить
                                • вот такого чувака бы на стертора натравить

                                  https://sun9-34.userapi.com/c858032/v858032269/c3369/GYCEEswvA0o.jpg
                                  Ответить
          • Вообще есть готовое же

            Это же скрипитовый высокоуровнявый яп, тут же смысл его ровно в том, чтобы брать готовое
            https://pypi.org/project/email-validator/

            зы: вот такой чел написал
            https://pypi.org/user/Joshua.Tauberer/
            Ответить
    • Сама задача -- говно.
      Если есть на свете ад для программистов, то они там день-деньской парсят произвольный HTML регулярками
      Ответить
      • Не тут html заранее задан (только img тэги и только с сокращением /> )
        Ответить
      • Да, HTML лучше парсить специальной библиотекой для XML/SGML, которая представит его в виде DOM или предоставит поиск элементов через XPath или через CSS-селекторы.

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

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

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