I have the following QRegExpValidator
QRegExpValidator doubleValidator = new QRegExpValidator(QRegExp("[-+]?[0-9]*[\\.,]?[0-9]+([eE][-+]?[0-9]+)?"));
It's supposed to be a Double numbers validator that accepts numbers, only one "e" sign, one comma OR dot and one + or - sign at the beggining of the string or after the "e" sign. It works for every case, except that it allows the string to start with a comma or dot. I tried to use [^\\.,] and variations and they did in fact work, but in this case, it would also allow to put two +- signs.
How can I make this to work?
The [-+]?[0-9]*[.,]?[0-9]+([eE][-+]?[0-9]+)?
pattern allows the ,
or .
at the start because [-+]?
and [0-9]*
can match empty strings due to the ?
(one or zero occurrences) and *
(zero or more occurrences) quantifiers, and then [.,]
matches a single occurrence of .
or ,
. Besides, if the method you are using does not anchor the pattern by default, you also need ^
and $
anchors around the pattern.
I suggest fixing that with
"^[-+]?[0-9]+([.,][0-9]+)?([eE][-+]?[0-9]+)?$"
^ ^^^^^^^^^^^^^^ ^
Note you do not need to escape the dot inside a character class, [.]
always matches a dot char only.
The [0-9]+([.,][0-9]+)?
matches 1+ digits and then an optional sequence of a .
or ,
followed with 1+ digits.