我需要验证来自QLineEdit的给定字符串。真实输入: 355.12°L
双数必须在0-360之间,最后一个字符必须是L或R。我使用了度(°)的QString掩码和360度的this example,但我不能同时使用掩码和QDoubleValidator。看起来只有QRegExp才能解决这个问题。
我的面具线:
">999.99°A"发布于 2014-07-09 11:40:00
((?:[012]?[0-9]{1,2}|3(?:[0-5][0-9]|60))(?:\.[0-9]{0,2})?)°[LR]试试上面的模式。我不确定qregexp是否支持(?:)模式。
发布于 2014-07-09 12:18:17
我建议的模式是刻意长和冗余的,以尽可能提高效率(目标是减少最可能的regex引擎工作)
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]$https://stackoverflow.com/questions/24652069
复制相似问题