2016-11-23 2 views
-2

я должен ограничить данные, введенные в текстовое поле с помощью регулярных выражений для следующего: ExS:Regexp для массива чисел с плавающей точкой, как и целые числа, разделенные запятой

  • 1,2,3
  • 2.2.3.1,3

и если пользователь покидает текстовое поле после ввода 1,2,2,3. Я должен удалить точку после 3 и сохранить.

Я начал ограничение вводить только точку или запятую с регулярным выражением «([.,] {1})» , но текстовое поле принимает одну точки, тогда как она позволяет ввести 3 запятых.

+2

Итак, вы хотите разрешить конечную точку с регулярным выражением? Используйте ['^ [0-9] + [.]? [0-9] * (, [0-9] + [.]? [0-9] *) * $'] (https: // regex101. com/r/Lkhugb/1) –

+2

Или вы имеете в виду, что разрешаете только эту точку в конце строки? Попробуйте '^ [0-9] + ([.] [0-9] +)? (, [0-9] + ([.] [0-9] +)?) * [.]? $', затем проверьте, что строка 'endsWith'' .' и 'truncate' it. –

+0

Конечная точка - это ничего, кроме того, если пользователь забывает завершить значение float и останавливается с точкой, то он должен быть обнаружен и игонирован. А также я не ограничиваю пользователя вводить только 3 таких значения. Это может быть n значений. –

ответ

2

Для самого регулярных следовать советам Wiktor Stribiżew

Знаете ли вы QRegexValidator? Для проверки достоверности данных, введенных в текстовом поле, лучший способом заключается в использовании QRegexValidator

http://doc.qt.io/qt-4.8/qregexpvalidator.html#details

// regexp: optional '-' followed by between 1 and 3 digits 
QRegExp rx("-?\\d{1,3}"); 
QValidator *validator = new QRegExpValidator(rx, this); 

QLineEdit *edit = new QLineEdit(this); 
edit->setValidator(validator); 

С помощью этого объекта пользователя не может ввести недопустимые данные в поле, так что вы do not необходимо обработать что-то, когда пользователь покидает текстовое поле

+0

Да, я знаю. К сожалению, я не в состоянии это использовать. –

Смежные вопросы