利用QRegExp限制輸入框只接受數值(可以是小數)

要求:

1) 輸入的只能是十進制的整數或者小數;

2) 數值可以是正數,零,或者負數;

3) 假如輸入的數字包含小數點,則小數點只能出現一次;

4) 假如輸入的數字包含小數點,則小數點前至少要有一位數字;

5) 假如輸入的數字包含小數點,則小數點後面也至少有一位數字。

 

代碼:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QRegExpValidator>
#include <QRegExp>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QRegExpValidator * pRegVld = new QRegExpValidator(this);
    pRegVld->setRegExp(QRegExp(QString("^-?\\d{1,}(\\.[0-9]+)?")));
    ui->lineEdit->setValidator(pRegVld);
}

MainWindow::~MainWindow()
{
    delete ui;
}

解釋:

1) ^代表字符串的開頭。^-合起來代表字符串的開頭必須是負號;

2) ?意味着它前面的字符可以出現一次,或者不出現。^-?合起來代表字符串開頭最多有一個負號;

3) \\d代表字符0-9的任意一個;

4) {1,}代表其前面的字符要出現至少一次,最多不限。所以\\d{1,}合起來代表字符串由任意數目的數字字符組成,但字符串不得爲空;

5) \\.代表小數點;

6) [0-9]的意義其實與\\d一致;

7) +的意義與{1,}一致。所以[0-9]+代表的意義與\\d{1,}一致;

8) \\.[0-9]+ 的意義是,字符串以 “.” 開頭,後面跟着一個非空字符串,且字符串由數字字符構成;

9) (\\.[0-9]+) 構成一個整體,後面跟了一個?。?說明這個整體(\\.[0-9]+) 最多出現一次,也可以不出現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章