zoukankan      html  css  js  c++  java
  • 使用正则表达式限制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));
    
  • 相关阅读:
    mysql 远程登陆不上
    hdu 5339 Untitled【搜索】
    SqlServer 书目
    passwordauthentication yes
    oracle 11g RAC ocfs2
    Oracle 11g RAC database on ASM, ACFS or OCFS2
    CentOS ips bonding
    Oracle 11g RAC features
    openStack 王者归来之 trivial matters
    openstack windows 2008 img
  • 原文地址:https://www.cnblogs.com/Doyoung/p/13519101.html
Copyright © 2011-2022 走看看