The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Регулярное выражения для проверки попадания в диапазон, !*! Aplei, 30-Май-11, 22:51  [смотреть все]
Имеется номер телефона в формате 7495123456789, имеется диапазон номеров провайдера А: 74951230000-74951249999.

Как написать именно через регулярное выражение проверку попадает ли номер в данный диапазон или нет?

  • Регулярное выражения для проверки попадания в диапазон, !*! Aplei, 22:52 , 30-Май-11 (1)
    > Имеется номер телефона в формате 7495123456789, имеется диапазон номеров провайдера А:
    > 74951230000-74951249999.
    > Как написать именно через регулярное выражение проверку попадает ли номер в данный
    > диапазон или нет?

    Дополню, что диапазоны могут быть "кривыми" : на примере короткого 456-523

    • Регулярное выражения для проверки попадания в диапазон, !*! Etch, 03:40 , 31-Май-11 (2)
      >> Имеется номер телефона в формате 7495123456789, имеется диапазон номеров провайдера А:
      >> 74951230000-74951249999.
      >> Как написать именно через регулярное выражение проверку попадает ли номер в данный
      >> диапазон или нет?
      > Дополню, что диапазоны могут быть "кривыми" : на примере короткого 456-523

      /^(74951)?2[34]\d{4}$/ -- это если номер без знаков тире. Тире можно всунуть если заранее знать его местонахождение, а если оно в любом месте может попасться, то хз.

      • Регулярное выражения для проверки попадания в диапазон, !*! Aplei, 06:56 , 31-Май-11 (3)
        >>> Имеется номер телефона в формате 7495123456789, имеется диапазон номеров провайдера А:
        >>> 74951230000-74951249999.
        >>> Как написать именно через регулярное выражение проверку попадает ли номер в данный
        >>> диапазон или нет?
        >> Дополню, что диапазоны могут быть "кривыми" : на примере короткого 456-523
        > /^(74951)?2[34]\d{4}$/ -- это если номер без знаков тире. Тире можно всунуть если
        > заранее знать его местонахождение, а если оно в любом месте может
        > попасться, то хз.

        не совсем то имел ввиду. Вопрос в том, как составить регексп для проверки попадания числа в диапазон. Данный регексп работает только для указанного случая, а если диапазон будет
        74951230000-74951241234 ?

        • Регулярное выражения для проверки попадания в диапазон, !*! Andrey Mitrofanov, 09:53 , 31-Май-11 (4)
          > не совсем то имел ввиду. Вопрос в том, как составить регексп для
          > проверки попадания числа в диапазон. Данный регексп работает только для указанного
          > случая, а если диапазон будет
          > 74951230000-74951241234 ?

          Децкий сад...

          Разбивать на диапазоны, которые успешно накрываются регекспами, регекспы для поддиапахзонов объединять через "или", потом, возможно оптимизировать, если делать нечего и если вообще возможно.

          0/ 74951230000-74951241234

          1/
          "^749512" 30000-41234
          . 30000-39999 | 40000-41234
          . "3[0-9]{4}" | "4" 0000-1234
          . . 0000-0999 | 1000-1234
          . . "0[0-9]{3}|1" 000-234
          . . . . . . . . . . . . . . . . . . . Э, гм! Ну, скажем Полуект!

          "^749512(3[0-9]{4}|4(0[0-9]{3}|1( Лениво мне! 000-234 )))$"

          • Регулярное выражения для проверки попадания в диапазон, !*! Andrey Mitrofanov, 10:21 , 31-Май-11 (7)
            >> не совсем то имел ввиду. Вопрос в том, как составить регексп для
            >> проверки попадания числа в диапазон. Данный регексп работает только для указанного
            >> случая, а если диапазон будет
            >> 74951230000-74951241234 ?
            > Децкий сад...
            > Разбивать на диапазоны, которые успешно накрываются регекспами, регекспы для поддиапахзонов
            > объединять через "или", потом, возможно оптимизировать, если делать нечего и если
            > вообще возможно.

            Кстати, я ленив (и провёл много часов над длиииииными регекспами), поэтому -

            > "^749512" 30000-41234
            >  . 30000-39999 | 40000-41234
            >  . "3[0-9]{4}" | "4" 0000-1234
            >  . . 0000-0999 | 1000-1234
            >  . . "0[0-9]{3}|1" 000-234

            - "оптимизировал" [одним из способов, общие первиксы за скобки выносил] _сразу_.

            Если следовать декларированной метОде, то:


            1/ 74951230000-74951241234

            2/
            74951230000-74951239999
            74951240000-74951240999
            74951241000-74951241199
            74951241200-74951241229
            74951241230-74951241234

            3/
            "7495123" 0000-9999
            "74951240" 000-999
            "74951241" 000-199
            "749512412" 00-29
            "7495124123" 0-4

            4/
            "7495123[0-9]{4}"
            "74951240[0-9]{3}"
            "74951241[01][0-9]{2}"
            "749512412[0-2][0-9]"
            "7495124123[0-4]"

            5/
            "^("
            "7495123[0-9]{4}|74951240[0-9]{3}|74951241[01][0-9]{2}|749512412[0-2][0-9]|7495124123[0-4]"
            ")$"

            6/
            "^(749512("
            "3[0-9]{4}|40[0-9]{3}|41[01][0-9]{2}|412[0-2][0-9]|4123[0-4]"
            ")$"

            7/
            "^(749512(3[0-9]{4}|40[0-9]{3}|41[01][0-9]{2}|412[0-2][0-9]|4123[0-4])$"

            .....
            Как-то так. Там есть местами пересекающиеся суффиксы, но ловить там нечего - только время тратить.

        • Регулярное выражения для проверки попадания в диапазон, !*! rur, 09:57 , 31-Май-11 (5)
          >>>> Имеется номер телефона в формате 7495123456789, имеется диапазон номеров провайдера А:
          >>>> 74951230000-74951249999.
          > не совсем то имел ввиду. Вопрос в том, как составить регексп для
          > проверки попадания числа в диапазон. Данный регексп работает только для указанного
          > случая, а если диапазон будет
          > 74951230000-74951241234 ?

          Попадание в диапазон - **арифметическое** свойство, а не символьное. Поэтому проверять
          надо так: if(7495123456789 >= 74951230000 && 7495123456789 <= 74951241234 ) "то ОК".

          Регексом такое сделать видимо не получится... Я бы посмотрел, если кто попробует.


          • Регулярное выражения для проверки попадания в диапазон, !*! Andrey Mitrofanov, 10:08 , 31-Май-11 (6)
            > **арифметическое** свойство, а не символьное.

            Отмазки? Зачем это тут? :-P

            > Я бы посмотрел, если кто попробует.

            Ну, посмотри сообщением выше... Делов-то.

            • Регулярное выражения для проверки попадания в диапазон, !*! sm00th1980, 10:49 , 31-Май-11 (8)
              >> **арифметическое** свойство, а не символьное.
              > Отмазки? Зачем это тут? :-P
              >> Я бы посмотрел, если кто попробует.
              > Ну, посмотри сообщением выше... Делов-то.

              а теперь подумай сколько ты написал строк кода через REGEXP-ы для этой задачи - с тем что теме предложили через арифметику?

              И задумайся над тем что через пару месяцев тебе придётся вернуться к этому коду и что-то исправить....

              • Регулярное выражения для, !*! Andrey Mitrofanov, 11:00 , 31-Май-11 (10)
                > а теперь подумай сколько ты написал строк кода через REGEXP-ы для этой
                > задачи - с тем что теме предложили через арифметику?

                Ну, на работе и не такой унылой фигнёй занимаюсь. :-P

                > И задумайся над тем что через пару месяцев тебе придётся вернуться к
                > этому коду и что-то исправить....

                Ты ещё открой дискуссию, GPL или BSDL больше подходит для лицензтрования "арифметических" регекспов. :-j

                Я не предлагал _так_ писать _код_, да ещё в "продакшене". Я вполне себе [почти] алгоритмически решил поставленную задачу. Препод нашего _студента_ будет доволен.

                Если бы школьники знали, что такое регекспы, была бы вполне себе олимпиадная задачка для 7-8-9 класса... А так взрослые дядьки сотрясают алгоритчическую %) пустоту.

                • Регулярное выражения для, !*! rur, 11:10 , 31-Май-11 (11)
                  >> а теперь подумай сколько ты написал строк кода через REGEXP-ы для этой
                  >> задачи - с тем что теме предложили через арифметику?

                  -- Ну, да, можно сравнивать по разрядам... Еще можно раскрыть диапазон и
                  сформировать массив телефонов, потом проверить, есть ли такой телефон в массиве?
                  А что, и память компа не будет простаивать!

                  Любую задачу можно решить сколь угодно сложно. -- аксиома, однако! :-)  


                  • Регулярное выражения для, !*! sm00th1980, 15:41 , 31-Май-11 (13)
                    >>> а теперь подумай сколько ты написал строк кода через REGEXP-ы для этой
                    >>> задачи - с тем что теме предложили через арифметику?
                    > -- Ну, да, можно сравнивать по разрядам... Еще можно раскрыть диапазон и
                    > сформировать массив телефонов, потом проверить, есть ли такой телефон в массиве?
                    > А что, и память компа не будет простаивать!
                    > Любую задачу можно решить сколь угодно сложно. -- аксиома, однако! :-)

                    to rur:
                    поддерживаю Коллега :)

                    Как говорилось не мной:
                    "если у вас есть проблема и вы решили использовать регулярки - то теперь у вас ДВЕ проблемы"

                • Регулярное выражения для, !*! Aplei, 11:12 , 31-Май-11 (12)
                  >[оверквотинг удален]
                  >> И задумайся над тем что через пару месяцев тебе придётся вернуться к
                  >> этому коду и что-то исправить....
                  > Ты ещё открой дискуссию, GPL или BSDL больше подходит для лицензтрования "арифметических"
                  > регекспов. :-j
                  > Я не предлагал _так_ писать _код_, да ещё в "продакшене". Я вполне
                  > себе [почти] алгоритмически решил поставленную задачу. Препод нашего _студента_ будет
                  > доволен.
                  > Если бы школьники знали, что такое регекспы, была бы вполне себе олимпиадная
                  > задачка для 7-8-9 класса... А так взрослые дядьки сотрясают алгоритчическую %)
                  > пустоту.

                  эх если бы так просто. Вот как раз такие "олимпиадники" понапишут биллингов, где нумерация задается ТОЛЬКО регекспом, а директора заключат договоры с 100500 войппровайдерами, где Новосибирск, к примеру, диапазонами покрошен как оливье!

                  • Регулярное выражения для, !*! sm00th1980, 15:46 , 31-Май-11 (14)
                    to Aplei:
                    > эх если бы так просто. Вот как раз такие "олимпиадники" понапишут биллингов,
                    > где нумерация задается ТОЛЬКО регекспом, а директора заключат договоры с 100500
                    > войппровайдерами, где Новосибирск, к примеру, диапазонами покрошен как оливье!

                    отлично вас понимаю. Сам внедрял и писал биллинг и приходилось думать как определить вхождение в диапазон - и регулярки здесь не самый лучший вариант.

                    Доводы:
                    1) крайне сложный - без пол-литра не разберёшься
                    2) тормозной по определению - мы же с символами работаем
                    3) хз скока скрытых подводных камней имеется в каждой регулярке :) без сотни другой unit-test-ов ОДНО такое выражение не покрыть - а следовательно там всегда будут потенциальные баги... что как бы для биллинга мягко говоря крайне не желательно...

                    это всего лишь моё ИМХО - не принимайте близко к сердцу если что.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру