Как удалить первый символ, если это запятая с помощью QRegExp? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть следующий QRegExpValidator

QRegExpValidator doubleValidator = new QRegExpValidator(QRegExp("[-+]?[0-9]*[\\.,]?[0-9]+([eE][-+]?[0-9]+)?"));

Предполагается, что это валидатор двойных чисел, который принимает числа, только один знак "e", одну точку с запятой ИЛИ и один знак + или - в начале строки или после знака "e". Это работает для каждого случая, за исключением того, что позволяет строке начинаться с запятой или точки. Я пытался использовать [^ \\.,] и варианты, и они действительно работали, но в этом случае это также позволило бы поставить два знака + -.

Как я могу заставить это работать?

1 Ответ

0 голосов
/ 13 сентября 2018

Шаблон [-+]?[0-9]*[.,]?[0-9]+([eE][-+]?[0-9]+)? допускает , или . в начале, потому что [-+]? и [0-9]* могут соответствовать пустым строкам из-за ? (один или ноль вхождений) и * (нольили более вхождений), а затем [.,] соответствует одному вхождению . или ,.Кроме того, если используемый вами метод не привязывает шаблон по умолчанию, вам также понадобятся привязки ^ и $ вокруг шаблона.

Я предлагаю исправить это с помощью

"^[-+]?[0-9]+([.,][0-9]+)?([eE][-+]?[0-9]+)?$"
 ^          ^^^^^^^^^^^^^^                  ^ 

Обратите внимание, что вам не нужно экранировать точку внутри класса символов, [.] всегда соответствует только точечному символу.

* [0-9]+([.,][0-9]+)? соответствует 1+ цифрам, а затем необязательная последовательность . или,, за которыми следуют 1+ цифр.

...