我需要一个必须代表范围的QLineEdit。 F.E.(1,2),对于这种表示,我想为用户设置验证检查器,不要写其他符号。 在这种情况下,我有char + int + char + int + char,如下例所示。 Qt有任何功能来处理这个问题吗? 提前致谢。
答案 0 :(得分:5)
您可以使用Qt的Input Validator功能来实现此目标。
以下代码段将限制您在指定的行编辑中的输入。
QRegExp re("^[[,(]{1,1}(0|[1-9]{1,1}[0-9]{0,9})[,]{1,1}(0|[1-9]{1,1}[0-9]{0,9})[],)]{1,1}$");
QRegExpValidator *validator = new QRegExpValidator(re, this);
ui->lineEdit->setValidator(validator);
修改强> 更新了正则表达式
答案 1 :(得分:2)
QRegExp expr("^[[,(]{1,1}(0|[1-9]{1,1}[0-9]{0,9})[,]{1,1}(0|[1-9]{1,1}[0-9]{0,9})[],)]{1,1}$");
这就是我想要的!我必须允许多于一个领先的0-s。
答案 2 :(得分:1)
不可能编写仅接受有效范围的正则表达式,原因是您可以检查语法而不是数值(除非e regexp引擎有一些扩展名)。
之间的区别[1234,5678)
和
[5678,1234)
不在语法中(正则表达式是什么),但在语义中(regexp不是那么强大)。
只检查正则表达式的语法
\[\d+,\d+\)
或者,如果您还允许其他类型的区间边界条件:
[\[)]\d+,\d+[\])]
答案 3 :(得分:0)
我建议不允许所有字符,只允许所有字符。例如:
QRegExp("[\\\\\\(\\)\\{\\}]\\d[\\\\\\(\\)\\{\\}]\\d[\\\\\\(\\)\\{\\}]");
我会解释:
[]这些包含你的char的匹配字符:\\(这实际上与\符号匹配,因为你需要为你的正则表达式一次转义它,再次为Qt String转义它使它成为\\),\ (用于打开括号等等。你可以添加你想要匹配的所有字符。一个很好的帮助是正则表达式备忘单。
\ d匹配单个数字,如果你想拥有多个数字,你可以使用\ d +代表至少一个数字,或者\ d {3}代表3个数字。 (+ 1或更多,?0或1,* 0或更多)
另一个例子是:
QRegExp("[\\\\\\(\\)\\{\\}]\\d[,\\.]\\d[\\\\\\(\\)\\{\\}]");
让中心角色为a。或者a,签名。