1

我有以下 QRegExpValidator

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

它应该是一个 Double numbers 验证器,它接受数字,只有一个“e”符号、一个逗号 OR 点和一个 + 或 - 符号,位于字符串的开头或“e”符号之后。它适用于所有情况,除了它允许字符串以逗号或点开头。我尝试使用[^\\.,]和变体,它们确实有效,但在这种情况下,它也允许放置两个 +- 符号。

我怎样才能使它工作?

4

1 回答 1

1

[-+]?[0-9]*[.,]?[0-9]+([eE][-+]?[0-9]+)?模式允许,or.开头,因为[-+]?and[0-9]*可以匹配空字符串,因为?(一次或零次出现)和*(零次或多次出现)量词,然后[.,]匹配一次出现.or ,。此外,如果您使用的方法默认不锚定图案,您还需要在图案周围^进行$锚定。

我建议用

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

请注意,您不需要转义字符类中的点,[.]始终只匹配点字符。

匹配 1+ 位数字,然后[0-9]+([.,][0-9]+)?是可选的 a 序列.,后跟 1+ 位数字。

于 2018-09-13T11:57:04.497 回答