如何在QLineEdit中限制表达式

时间:2014-03-25 06:37:21

标签: regex qt validation qlineedit

我需要一个必须代表范围的QLineEdit。 F.E.(1,2),对于这种表示,我想为用户设置验证检查器,不要写其他符号。 在这种情况下,我有char + int + char + int + char,如下例所示。 Qt有任何功能来处理这个问题吗? 提前致谢。

4 个答案:

答案 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,签名。