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

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    def normalize_phone(phone):
            if (not phone):
                return
            normalized_phone = phone.replace("(", "").replace(")", "").replace("+", "").replace("-", "").replace(" ", "")
            if normalized_phone[0] == "7":
                p = list(normalized_phone)
                p[0] = "8"
                normalized_phone = "".join(p)
            if normalized_phone[0] == "9":
                normalized_phone = "8" + normalized_phone
            return normalized_phone

    Питонокод пхпешника.

    Запостил: хуита, 17 Января 2018

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

    • Не знаю, кися, я всё это делаю гораздо проще:

      $_POST['phone']=preg_replace('/\D/', '', $_POST['phone']);
      if($_POST['phone']!=''){
      if(substr($_POST['phone'], 0, 1)=='8' && strlen($_POST['phone'])==11){
      $_POST['phone']='7'.substr($_POST['phone'], 1);
      }
      }
      Ответить
      • А зачем заменять начальную восмёрку семёркой?
        Ответить
        • Перевод в международный формат, через код страны.
          Ответить
          • Но ведь в ОП-коде наоборот +7 приводится к восьмёрке.
            Ответить
            • ОП-код делает хуйню.
              Ответить
              • А анал-пер-оральный код ещё большую.

                А писаться он должен так:
                $phone = preg_replace('/\D/', '', $_POST['phone']);
                if(!empty($phone) && $phone[0] == '8' && strlen($phone) == 11) {
                    $phone[0] = '7';
                }
                Ответить
                • Да-да, главное - расставить эти ёбаные пробельчики вокруг операторов сравнения и присваивания...
                  Ответить
                  • Ты, наверное, на досуге читаешь какие-нибудь обфусцированные файлы на js для развлечения?
                    Ответить
                    • Не переходи в крайности, милый. Я просто всегда терпеть не мог табуляции и пробелы, которыми обычно разбавляют код алгоритма - нарушается его очевидность. Переносов строк вполне достаточно. Я некоторое время назад выкладывал ссылку на большой файл с таким, написанным мною кодом, - и глазу приятно, и работает.
                      Ответить
          • Всё верно. Конское количество деревенских долбоёбов, кроме российских номеров ничего больше не видевших, вводят номера своих телефонов с первой цифры "8". А номера проходят проверку на правильность (так как сайт рассчитан на использование не только в пределах России), и если пользователь увидит, что сайт отрицает корректность правильного, на взгляд колхозника, номера, то он просто съебёт с сайта, даже не связываясь со службой поддержки.
            Ответить
            • В оригинальном коде две ошибки даже для российских номеров:
              1. Код сначала удаляет знаки препинания (включая ведущий плюс), а потом заменяет ведущую семёрку на восьмёрку. Таким образом, получим:
              +7(812)123-45-67 → 88121234567 // это правильно
              765-43-21 → 8654321 // это лажа

              2. Если номер начинается с девятки, добавляет восьмёрку. Это правило рассчитано на редкий случай: введён федеральный номер мобильника, но не ввели +7 или восьмёрку.
              (916)123-45-67 → 89161234567 // это правильно
              987-65-43 → 89876543 // это лажа
              Ответить
    • def normalize_phone(arg):
          if not arg:
              return ''
          phone = filter(lambda x: 47 < ord(x) < 58 , arg)
          phone = phone[0] == '8' and phone[1:]
          return phone[0] == '9' and '7' + phone or phone
      Ответить
      • def normalize_phone(a):
            if not a: return ''
            d, *a = filter(str.isdigit, a)
            return {'8': '7'}.get(d, d) + ''.join(a)
        Ответить
        • def normalize_phone(a):
              if a: return (lambda d,*a:{'8':'7'}.get(d,d) + ''.join(a))(*filter(str.isdigit, str(a)))
          Ответить
          • Крайне лаконично показан мотив перехода на py3 ж)
            осталось только понять как гугл умудрился однострочную функцию написать в 4к строк
            Ответить

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