Форум программистов, компьютерный форум CyberForum.ru

Сделать валидатор - C++

Войти
Регистрация
Восстановить пароль
 
fised
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 15
22.12.2015, 20:32     Сделать валидатор #1
Здравствуйте, уважаемые) На форуме только поселился, если кто-то может помочь, то буду очень благодарен)
К сожалению, я не очень силен(надеюсь, что пока), в регулярных выражениях, да и с qt мало поработал, вопрос может показаться глупым, но ближе к делу)
Задача: написать валидатор, вводить можно строку - стока с указанием единиц измерения, к примеру 25645км_35м, где "_" - это пробел. Все это делается в qt.
Способов решения много, но я пошел самым, на мой взгляд, эффективным, а именно - регулярки.
Вообще мой код работает, но работает кое как, а точнее, строку вида "45км 5" принимает за верную.
Прошу помочь исправить данную проблему, и еще, помочь со следующим. Как сделать проверку введеных единиц измерения? В ТЗ не указано, что это надо учитывать, но логически будет неверно, если у нас будет строка "123см 23км", то есть что бы большие единицы шли перед малыми, а не после.
C++
1
2
3
4
5
6
7
8
9
10
11
12
QValidator::State ExampleValidator::validate( QString & input, int & pos ) const
{
    QRegExp rx("^\\d{1,}[к|д]?м+\\s+\\d{1,}([д|с]?м?)$"); 
    QRegExp rx2("^\\d{1,}[к|д]?м?\\s?$"); 
    if (input.contains(rx2)) 
    return QValidator::Intermediate; 
    if (input.contains(rx)) 
    return QValidator::Acceptable; 
    return QValidator::Invalid; 
 
 
}
З.Ы. Прошу строго не судить, только учусь.
З.Ы.Ы. Я правда пытался сам)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2015, 20:32     Сделать валидатор
Посмотрите здесь:

Надо сделать так если программа запущена с параметром -admin тогда написать доступ открыт. Как это сделать? C++ Builder
C++ пытаюсь сделать реализацию через считывание из файла кол-ва чисел, i,но незнаю как сделать реализацию из файла в массив и сортировки.
Как сделать отдельные записи в таблице по строкам, чтобы сделать запросы? C++
C++ Сделать заглавной первую букву первого слова, во втором сделать заглавной вторую
C++ Я хочу сделать программу - чат. Что б обмениваться сообщениями. Как такое сделать? Какой код?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
23.12.2015, 07:59     Сделать валидатор #2
Цитата Сообщение от fised Посмотреть сообщение
но я пошел самым, на мой взгляд, эффективным, а именно - регулярки.
Прочитай мою подпись
Цитата Сообщение от fised Посмотреть сообщение
строку вида "45км 5" принимает за верную
Потому что ([д|с]?м?), это значит, что единицы измерения может и не быть.
Вообще вот
C++
1
"^\\d+[к|д]?м\\s+\\d+[д|с]?м$"
правда это не совсем правильно, т.к. например такая строка 123дм 123дм пройдет. Правильную регулярку написать сложно, т.к. не знаю всех возможных вариаций входных данных.
fised
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 15
23.12.2015, 12:47  [ТС]     Сделать валидатор #3
Да, слышал о этой поговорке)
Вот в том то и проблема, что тут одной регуляркой не обойтись, надо условия проверки сделать. Я понимаю что проверяем если в инпуте такая то величина, и запрещаем вводить ее еще раз, но вот как запретить, не хватает знаний) Но все равно спасибо за помощь, буду пробовать сам)
Yandex
Объявления
23.12.2015, 12:47     Сделать валидатор
Ответ Создать тему
Опции темы

Текущее время: 11:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru