Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Регулярное выражение на проверку дробного числа


Автор: Gideon 27.11.2013, 13:27
Дробное число в тексте должно быть не длиннее n симпволов, с учетом разделителя. При этом в дробной части должно быть не более m символов. И количество символов в целой и дробной частях зависимы. Т.е. <n-m-1>,m.

Автор: Akella 27.11.2013, 16:28
покажи как делал, какие примеры обработал

Автор: Gideon 27.11.2013, 17:13
Делал просто, регулярное составил \d+\,\d+. Оно видит все, а нужно чтобы дробная часть не более 3 цифр, а все 7 было. Примеры: 123,123; 1234,12; 12345,1; 12,1 - это правильные, а не правильные вот - 1,1234; 1234,123

Автор: Poseidon 27.11.2013, 18:01
Цитата(Gideon @  27.11.2013,  17:13 Найти цитируемый пост)
Оно видит все, а нужно чтобы дробная часть не более 3 цифр, а все 7 было
"Не более 3 цифр" можно добиться с помощью квантификатора {1, 3}, а вот "все не более 7"... Наврятли это можно сделать регулярками. Я бы делал выборку регуляркой по первому условию, а потом уже проверял бы длину результата через Length 

Автор: Akella 27.11.2013, 20:37
Gideon, читай про квантификацию http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F#.D0.9A.D0.B2.D0.B0.D0.BD.D1.82.D0.B8.D1.84.D0.B8.D0.BA.D0.B0.D1.86.D0.B8.D1.8F_.28.D0.BF.D0.BE.D0.B8.D1.81.D0.BA_.D0.BF.D0.BE.D1.81.D0.BB.D0.B5.D0.B4.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D0.BE.D1.81.D1.82.D0.B5.D0.B9.29

Добавлено @ 20:39
Цитата(Gideon @  27.11.2013,  17:13 Найти цитируемый пост)
дробная часть не более 3 цифр


Цитата(Gideon @  27.11.2013,  17:13 Найти цитируемый пост)
а не правильные вот - 1,1234; 1234,123 

Чем неправильное число "1234,123"? Ведь здесь не более трёх цифр



Добавлено @ 20:42
Вот так можно
\d+,\d{0,3}[^\d]

\d+ - означает, что должно быть одна или более цифр
d{0,3} - означает, что чисел должно быть три или менее
[^\d] - означает, что должна быть не цифра

Запятую не обязательно экранировать знаком \

Автор: Poseidon 28.11.2013, 01:58
Цитата(Akella @ 27.11.2013,  20:37)
Чем неправильное число "1234,123"? Ведь здесь не более трёх цифр

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

Добавлено через 4 минуты и 31 секунду
Цитата(Akella @ 27.11.2013,  20:37)
[^\d] - означает, что должна быть не цифра

"Не цифру" можно указать как \D

Автор: Akella 28.11.2013, 22:12
Цитата(Poseidon @  28.11.2013,  01:58 Найти цитируемый пост)
Оно не правильно тем, что здесь всего 8 знаков, а по условию должно быть не более семи. Твоя регулярка это, кстати, тоже не учитывает.


Пожалуйста:
(\d+,\d{0,3}[^\d]){0,7}

Автор: Poseidon 28.11.2013, 23:33
Не плохо. Но сюда влезет этот самый символ "не число" Позволю себе немного "причесать" пример:

Код

(\D|^)(\d+(\.|,)\d{1,3}){1,7}(\D|$)


Искомое вернет вторая группировка.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)