使用正则表达式限制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,因此第一位正好是四、第二位不大于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

能够看得出,上面的写法很是冗余,如今将上面的写法稍作简化,写法以下:this

\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));
相关文章
相关标签/搜索