- Регулярное выражения для проверки попадания в диапазон, 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])$" ..... Как-то так. Там есть местами пересекающиеся суффиксы, но ловить там нечего - только время тратить.
- Регулярное выражения для проверки попадания в диапазон, Aplei, 10:51 , 31-Май-11 (9)
>[оверквотинг удален] > ")$" > 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-ов ОДНО такое выражение не покрыть - а следовательно там всегда будут потенциальные баги... что как бы для биллинга мягко говоря крайне не желательно... это всего лишь моё ИМХО - не принимайте близко к сердцу если что.
|