Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2012, 01:41   #1
Григоренко Степан
Пользователь
 
Регистрация: 05.05.2011
Сообщений: 35
Вопрос Проблема с TRegExpr

Здравствуйте.
Попытался написать код, который бы проверял, является ли строка рациональным числом.
Число должно быть длиной не более 7 символов, первый может быть минус.

То, что у меня получилось:

Код:
Reg:= TRegExpr.Create;
Reg.Expression := '^[-]?(\d){1,7}[.]?(\d){0,7}$';

read:= Edit6.Text;

if Reg.Exec(read)
    then ShowMessage('OK')
    else ShowMessage('No');
Reg.Free;
как сделать, чтобы корректно читалось с плавающей точкой?
Поиск по форуму вопрос не прояснил.
Заранее спасибо.

Последний раз редактировалось Григоренко Степан; 04.03.2012 в 13:32.
Григоренко Степан вне форума Ответить с цитированием
Старый 04.03.2012, 13:49   #2
ViktorXP
Форумчанин
 
Аватар для ViktorXP
 
Регистрация: 24.11.2006
Сообщений: 108
По умолчанию

а при чем тут компонент TRegExpr? если ты регулярку правильно сложить не можешь.
Цитата:
^(\d+)$
тут указаны все цифры между началом и концом. при этом ты зачем то взял цифру в группу.
Цитата:
^[-]?(\d){1,7}[.]?(\d){0,7}$
тут указано что:
а) от начала не обязательный набор символов из одного знака. (зачем минус в квадратные скобки взято тоже не понятно).
б) от одной до семи групп из одной цифры (зачем цифра взята в группу?).
в) не обязательный набор символов из одного любого символа (вообще тут какой то коллапс. который даже откомментировать страшно)
г) от нуля до семи групп по одной цифре
д) и должен быть обязательно конец строки

пс. достаточно написать:
Код:
^\-?\d+(\.\d+)?$
если ты пользуешься XE+ (хотя кажись и в 2010 есть) то там есть стандартный компонент TRegEx. который может намного больше за TRegExpr и там можно написать
Код:
^\-?\d+(?:\.\d+)?$
ViktorXP вне форума Ответить с цитированием
Старый 04.03.2012, 16:41   #3
Григоренко Степан
Пользователь
 
Регистрация: 05.05.2011
Сообщений: 35
Счастье

А, нет, спасибо, я решил:
Код:
Reg.Expression := '^\-?[\d]{1,7}\.?[\d]{0,7}$';

if (Reg.Exec(read)) and (Length(read)<=7)
    then ... 
    else...
Григоренко Степан вне форума Ответить с цитированием
Старый 04.03.2012, 22:59   #4
ViktorXP
Форумчанин
 
Аватар для ViktorXP
 
Регистрация: 24.11.2006
Сообщений: 108
По умолчанию

регулярка логически не правильна. так как она пропустит строку "99." (без кавычек соответственно).
ViktorXP вне форума Ответить с цитированием
Старый 04.03.2012, 23:05   #5
ViktorXP
Форумчанин
 
Аватар для ViktorXP
 
Регистрация: 24.11.2006
Сообщений: 108
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TRegExpr парсинг числа и перевод во float Detka.i.alex Общие вопросы Delphi 15 06.08.2010 11:35
Проблема с TRegExpr zver777 Общие вопросы Delphi 3 11.05.2010 07:00
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37