qt中,常使用正则表达式来约束QLineEdit的输入。例如:
表示只允许输入数字
myValidator = QRegExpValidator(QRegExp("^[0-9]+$"))
self.lineEdit.setValidator(myValidator)
1.根据上面案例,我们事先介绍一下正则符号[0-9]
它表示可以输入的字符在0,1,2,3,4,5,6,7,8,9
之间。表示了只能输入数字。
举一反三,若是符号改为[A-Z]
表示只能输入大写字母,符号改为[a-z]
表示只能输入小写字母。我们也可以联合起来:[A-Za-z0-9]
表示只能输入大写字母,小写字母和数字。
\.
表示小数点,[0-9\.]
则表示可以输入数字和小数点。
2.上面案例中,跟在[0-9]
后面的+
表示,可以输入无限个字符。
但假如我们要输入有限的字符:
2.1可以采用[0-9][0-9]$
表示限定输入两个数字,范围都是0~9.
2.2假如限制输入9个数字,不需要讲[0-9]
重复9遍,\d
表示能够匹配一个数字,范围是【0~9】。也就是说[0-9][0-9]$
等同于[0-9]\d
,[0-3][0-9]$
等同于[0-3]\d
。那么我们若是要限制输入九个数字,那么就可以输入[0-9]\d{8}
。\d{8}
就表示\d
重复8次。
注:\d只对数字有效果[A-Z]\d$
还是等同于[A-Z]$
3.定位符
^
匹配输入字符串开始的位置。
$
匹配输入字符串结尾的位置。
接下来分析下一组案例:
[-255,255]整数:
^-?([0,1]?\d?\d|2[0-4]\d|25[0-5])$
4.?
的作用表达前面的字符出现了0次或一次。
也就是说:^-?([0-9])$
等同于^-([0-9])$
加上^([0-9])$
。
-
代表负数,上述的表示方式就代表了正数和负数。
5.|
表示管道,就是平行分组,后来取并集作为最后结果。
从案例上分析,^-?([0,1]?\d?\d|2[0-4]\d|25[0-5])$
也就等于^-?([0,1]?\d?\d)$
再加上^-?(2[0-4]\d)$
再加上^-?(25[0-5])$
。
6.最后,结合上述讲解综合分析语句:
^-?([0,1]?\d?\d|2[0-4]\d|25[0-5])$
我们根据管道分解为3块:
^-?([0,1]?\d?\d)$
:表示正负号为正数或负数,百位上0~1
,十位上0~9
,在个位上0~9
。综合表示为-199~199
的范围。
^-?([1,2]?[0-4]?\d)$
:表示正负号为正数或负数,百位上0~2
,十位上0~4
,在个位上0~9
。综合表示为-249~-200,200~249
的范围。
^-?([1,2]?5[0-4]?)$
:表示正负号为正数或负数,百位上0~2
,十位上为5,个位上0~4
。综合表示为-255~-250,250~255
的范围。
接下来分析下一组浮点数案例:
非零开头的最多带两位小数的数字:
^-?(180|1?[0-7]?\d(\.\d{2})?)$
7.\.
代表可输入小数点。\.\d{2}
表示小数点后可输入2位。若是\.\d+
则表示小数点后可输入任意位数。
常用表达式:
1.约束输入大写字母
^[A-Z]+$
2.约束输入小写字母
^[a-z]+$
3.约束输入大小写字母加上数字和下划线。
^[0-9A-Za-z_]+$
4.约束输入数字
^[0-9]+$
5.约束输入11位数字
^\d{11}$
6.约束输入[100,-100]整数
^-?(100|1?\d{1,2})$
7.约束输入[100,-100]浮点数
^-?(100|1?\d{1,2}(\.\d+)?)$
8.约束输入[100,-100]浮点数,保留2位
^-?(100|1?\d{1,2}(\.\d{1,2})?)$
9.经典范围:[-180,180],保留两位,浮点数
^-?(180|1?[0-7]?\d(\.\d{1,2})|[1-9]?\d(\.\d{1,2})?)$