1

我需要验证来自 QLineEdit 的给定字符串。真实输入:355.12° L

双精度数必须介于 0-360 之间,最后一个字符必须是 L 或 R。我使用 QString 掩码表示度数(°),这个示例用于 360,但我不能同时使用掩码和 QDoubleValidator。看起来只有 QRegExp 才能解决这个问题。

我的面具字符串:

">999.99°A"
4

2 回答 2

1
((?:[012]?[0-9]{1,2}|3(?:[0-5][0-9]|60))(?:\.[0-9]{0,2})?)°[LR]

试试上面的模式。我不确定 qregexp 是否支持(?:)模式。

于 2014-07-09T11:40:00.587 回答
1

我建议的模式故意冗长且冗余,以尽可能提高效率(目标是尽可能减少正则表达式引擎的工作)

QRegExp exp("^(?:[1-2][0-9]{0,2}(?:\\.[0-9]{1,2})?|3(?:[0-5]?[0-9]?(?:\\.[0-9]{1,2})?|60(?:\\.00?)?)|[4-9][0-9]?(?:\\.[0-9]{1,2})?|0(?:\\.[0-9]{1,2})?)° ?[LR]$");
lineEdit_->setValidator(new QRegExpValidator(exp, this));

此模式禁止十位和数百位的前导零,并使限制为两位数的小数可选(因此,不允许尾随或前导点)°(或 之间允许可选空格L R

现在,如果您需要一个完全适合掩码的模式999.99°A(即前导零是正确的,任何地方都没有可选空格,总是有三位数字和两位小数),您可以使用此模式而不是以前的模式:

^(?:[0-2][0-9]{2}\\.[0-9]{2}|3(?:[0-5][0-9]\\.[0-9]{2}|60\\.00))°[LR]$
于 2014-07-09T12:18:17.150 回答