Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Регулярные выражения: как проверить вхождение числа в диапазон   Найти похожие ветки 

 
bss   (2010-06-07 19:18) [0]

Нужно описать конструкцию, которая задает возможный диапазон чисел.

Пример: \d{1,5} - разрешает вводить пятизначное число. Фактически, ограничение - от "0" до "99999". А хотелось бы задавать конкретный диапазон, например, от "45" до "567"


 
xayam ©   (2010-06-07 19:26) [1]

а чем условный оператор не устраивает?


 
bss   (2010-06-07 19:31) [2]

Тем, что мне нужно описать это в терминах регулярных выражений.


 
Медвежонок Пятачок ©   (2010-06-07 19:32) [3]

Пример: \d{1,5} - разрешает вводить пятизначное число

и стодвадцатипятизначное тоже позволяет


 
test ©   (2010-06-07 19:35) [4]

Либо выбран не нужный инструмент для задачи, либо задача предполагает что то еще, если это телефонный номер то задача имеет смысл, но почему бы для экономии всего не перевести в integer и не сравнить?


 
Медвежонок Пятачок ©   (2010-06-07 19:37) [5]

и даже

"мама вымыла раму 12345 раз стоя на подоконнике"

тоже позволяет.


 
bss   (2010-06-07 19:39) [6]


> и стодвадцатипятизначное тоже позволяет

если это серьезный коммент - то нет, не позволяет. Строчка 574693 не соответствует регулярному выражению \d{1,5}

Если же ты прекрасно понял о чем идет речь, но решил от нечего делать придираться к формулировке вопроса - спасибо за комент.


 
Медвежонок Пятачок ©   (2010-06-07 19:44) [7]

if ExecRegExpr("\d{1,5}","12345678944141414124124141241241241241") then ShowMessage("ok");


 
Медвежонок Пятачок ©   (2010-06-07 19:45) [8]

if ExecRegExpr("\d{1,5}","мама вымыла раму 12345 раз стоя на подоконнике") then ShowMessage("снова сработало");


 
Медвежонок Пятачок ©   (2010-06-07 19:48) [9]

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

PS красную площадь тоже можно без проблем подмести зубной щеткой.


 
Leonid Troyanovsky ©   (2010-06-07 19:49) [10]


> Медвежонок Пятачок ©   (07.06.10 19:45) [8]

Мама устала.

--
Regards, LVT.


 
Медвежонок Пятачок ©   (2010-06-07 19:57) [11]

скорее устанет тот кто начнет сочинять выражение по формулировке в вопросе.


 
bss   (2010-06-07 19:59) [12]


> if ExecRegExpr("\d{1,5}","12345678944141414124124141241241241241")
> then ShowMessage("ok");

ты про начало, конец строки? Я пользуюсь DevExpress"овской реализацией, там немного по-другому. Если я правильно тебя понял, то тебе понятнее будет так: ^\d{1,5}$

спасибо большое за замечание


 
Медвежонок Пятачок ©   (2010-06-07 20:09) [13]

ну тогда остается замечание про красную площадь и зубную щетку.
оно в силе.

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

написать можно, читать трудно. поддерживать при смене условий - просто нереально.


 
bss   (2010-06-07 20:13) [14]

думаю, есть способ более оптимальный


 
Медвежонок Пятачок ©   (2010-06-07 20:14) [15]

конечно есть.
алгоритмический.


 
bss   (2010-06-07 20:46) [16]

как же это характерно для данного сайта...

Я же говорю - мне нужно это реализовать на регулярных выражениях. Не стоит мне объяснять, что то, чего я хочу - мне не нужно.


 
Медвежонок Пятачок ©   (2010-06-07 20:59) [17]

нужно - флаг в руки.
пиши все допустимые комбинации


 
b z   (2010-06-07 21:27) [18]


> А хотелось бы задавать конкретный диапазон, например, от
> "45" до "567"
 [1-4][0-9][0-9]|[5][0-5][0-9]|[5][6][0-7]|[1-4]?[4-9][5-9]
? :)


 
Медвежонок Пятачок ©   (2010-06-07 21:35) [19]

ага щаз

"44" - и уже мимо.


 
инспектор   (2010-06-07 21:37) [20]


> как же это характерно для данного сайта...


Тебя здесь насильно держат или ты других сайтов не знаешь ? Их много, поверь.

А то мало того, что хочешь странного, так еще и наезжаешь, ламер недоделанный.


 
b z   (2010-06-07 22:17) [21]


> "44" - и уже мимо.
Так по условию и должно быть мимо. Однако, да, выражение не до конца верно, но думаю, что автору направление поиска по диапозону понятно.


 
Медвежонок Пятачок ©   (2010-06-07 22:25) [22]

Так по условию и должно быть мимо

[1-4][0-9]

"44" мимо не по условию, а по приведенному выражению

Однако, да, выражение не до конца верно

Скромняга.
Я бы сказал, что оно от начала и до конца неверно


 
b z   (2010-06-07 22:37) [23]

Там выражение совсем другое...


 
Медвежонок Пятачок ©   (2010-06-07 22:43) [24]

я взял самое начало, для первых двух символов. причем всего один вариант.

и уже мимо.
второй символ должен зависеть от первого. а он сам по себе [0-9]


 
bss   (2010-06-08 15:02) [25]

В ЖЖ в течении часа подсказали отличную ссылку:

http://utilitymill.com/utility/Regex_For_Range

Для приведенного в топике примера от "45" до "567" получилось:

\b0*(4[5-9]|[5-9][0-9]|[1-4][0-9]{2}|5[0-5][0-9]|56[0-7])\b

учитывая автоматизм составления - сойдет. Уверен был, что где-то это уже давно разжевано.


 
test ©   (2010-06-08 16:59) [26]

bss   (08.06.10 15:02) [25]
Жадные зеленые человечки ))
В теле страницы нет javascript с кодом решения.


 
Медвежонок Пятачок ©   (2010-06-08 17:02) [27]

Уверен был, что где-то это уже давно разжевано.

Это точно. Причем прямо в этой ветке. в 13 посте.

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


 
bss   (2010-06-08 17:53) [28]


> но она будет очень похожа на список всех допустимых вариантов
> строки

я это понял как:

0|1|2|3|4|5|6|7|8|9|10|11|12|13...

и так далее. Что, конечно, бред.
В общем, проблема решена.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.048 c
15-1267574302
DillerXX
2010-03-03 02:58
2010.08.27
Может тут мне помогут с вопросом о модеме?


2-1266996594
Махно
2010-02-24 10:29
2010.08.27
Разъясните ситуацию


2-1272104034
Kukulkan
2010-04-24 14:13
2010.08.27
Изменение TGoupBox!


11-1220845969
Dmitro
2008-09-08 07:52
2010.08.27
Управление Selection в ListView


2-1268726485
Boortwint
2010-03-16 11:01
2010.08.27
Нахождение "особого" элемента в массиве.