使⽤正则表达式限制QLineEdit不能输⼊⼤于某个整数
使⽤正则表达式限制QLineEdit不能输⼊⼤于某个整数,即:使⽤正则表达式,匹配不⼤于某个整数
举例:匹配不⼤于4567
* 原理分析:
匹配不⼤于4567这个数,所以第⼀个想到的是只要⼩于4567就都匹配,⼩于4567不能直接匹配,但是可以匹配⼩于四位数的整数,也就是说只要是三位数就都可以匹配,那⼤于四位数的当然是完全不匹配了,正则表达式可以写做:
[0-9]
[0-9][0-9]
[0-9][0-9][0-9]
现在就只剩下四位数,四位数就需要细分了,⾸先从它的千位也就是第⼀位看起,不⼤于4567,那么第⼀位当然是不能⼤于4,所以只要第⼀位不⼤于4 的整数就都匹配,正则表达式写做:
[0-3][0-9][0-9][0-9]
四位数的第⼀位解决了,那么就是第⼆位数了,第⼆位数不⼤于5,但是前提是前⾯的第⼀位数正好是4,所以第⼀位正好是4、第⼆位不⼤于5,后两位⽆论是什么都匹配,正则表达式写做:
4[0-4][0-9][0-9]
以此类推,第三位不⼤于6,第四位不⼤于7,正则表达式分别写做:
45[0-6][0-9]
456[0-7]
正则匹配是什么最后⼀种情况:正好是4567,正则表达式直接写做:
4567
组装
现有多个匹配条件,需要使⽤符号|连接多个条件,所以综上条件,正则表达式写做:
[0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-3][0-9][0-9][0-9]|4[0-4][0-9][0-9]|45[0-6][0-9]|456[0-7]|4567
可以看得出,上⾯的写法⾮常冗余,现在将上⾯的写法稍做简化,写法如下:
\d|\d{0,2}|\d{0,3}|[0-3]\d{0,3}|4[0-4]\d{0,2}|45[0-6]\d|456[0-7]|4567
QLineEdit限制输⼊代码
/* ^ 和 $ 表⽰正则表达式的起始和截⽌位置
* \d 匹配任意数字
* {0,2} 重复0-2次,包括0和2
* 为避免\d被转义,需要先转义\,所以是两个\
*/
QRegExp rx("^\\d|\\d{0,2}|\\d{0,3}|[0-3]\\d{0,3}|4[0-4]\\d{0,2}|45[0-6]\\d|456[0-7]|4567$"); // 匹配⼩于4567
QLineEdit * edit = new QLineEdit(this);
edit->setValidator(new QRegExpValidator(rx,this));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论