我需要验证来自 QLineEdit 的给定字符串。真实输入:355.12° L
双精度数必须介于 0-360 之间,最后一个字符必须是 L 或 R。我使用 QString 掩码表示度数(°),这个示例用于 360,但我不能同时使用掩码和 QDoubleValidator。看起来只有 QRegExp 才能解决这个问题。
我的面具字符串:
">999.99°A"
我需要验证来自 QLineEdit 的给定字符串。真实输入:355.12° L
双精度数必须介于 0-360 之间,最后一个字符必须是 L 或 R。我使用 QString 掩码表示度数(°),这个示例用于 360,但我不能同时使用掩码和 QDoubleValidator。看起来只有 QRegExp 才能解决这个问题。
我的面具字符串:
">999.99°A"
((?:[012]?[0-9]{1,2}|3(?:[0-5][0-9]|60))(?:\.[0-9]{0,2})?)°[LR]
试试上面的模式。我不确定 qregexp 是否支持(?:)
模式。
我建议的模式故意冗长且冗余,以尽可能提高效率(目标是尽可能减少正则表达式引擎的工作):
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]$