使用正則表達式限制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));
相關文章
相關標籤/搜索