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
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.