我需要从QLineEdit验证给定的字符串。 真实输入: 355.12°L
双号必须在0-360之间,最后一个字符必须是L或R. 我已经使用了QString mask for degree(°)和this example for 360但是我不能同时使用mask和QDoubleValidator。看起来只有QRegExp才能解决这个问题。
我的面具字符串:
">999.99°A"
答案 0 :(得分:1)
((?:[012]?[0-9]{1,2}|3(?:[0-5][0-9]|60))(?:\.[0-9]{0,2})?)°[LR]
尝试以上模式。我不确定qregexp是否支持(?:)
模式。
答案 1 :(得分: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]$