QT 正则验证

前言:

转载请附上连接,本帖原创请勿照抄。

      在项目中经常会遇到对字符串进行验证的情况,QT提供了一个更加强大的类-QRegExp,使用正则表达式来验证各类字符串的正确性。

一、基础说明

正则表达式(Regular Expression,通常简写为RegExp、RE等),预先定义一些字符或字符的组合,用于匹配文本中的一段字符串。下面是它的一些用途——

1.验证

      判断字符串是否符合某个标准,比如“是一个整数”或者“没有空格”。

2.搜索

      正则表达式提供了比普通字符串匹配更为强大的匹配方式,比如匹配下面的词语:mail, letter, correspondence,但是不包括email, mailman, letterbox等等。

3.查找并替换

      正则表达式能够用一个不同的字符串,替换所有出现另一个字符串的地方,比如用&替换&,如果原先&后面已经有了amp;那么不替换。

4.分割字符串

      根据tab来分割字符串。

      C++编译器会对反斜杠进行转换,要想在正则表达式中包括一个\,需要输入两次,例如\\s。要想匹配反斜杠本身,需要输入4次,比如\\\\。

二、用法

      如果输入与正则表达式相匹配,则返回Acceptable;如果部分匹配,则返回Intermediate(部分匹配,意思是如果给它增加额外的字符则能够匹配正则表达式);如果不匹配则返回Invalid。

这个枚举类型说明了被验证的字符串是哪种类型。

QValidator::Invalid:值为0,表示字符串完全不匹配;

QValidator::Intermediate:值为1,表示部分匹配;

QValidator::Acceptable:值为2,表示完全匹配。

//代码在这个地方体现
QRegExpValidator regs(rE, 0);

验证手机号邮箱固话

//手机号
^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$

//邮箱
^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$

代码实现:

  构造初始化:

//测试都可以通过,这些数据都是随便填的。
QStr="177666647@qq.com";
QStr="177666647@qq.com";
QStr="13266662222";
//没通过可能大部分网站和我一样没针对这种邮箱格式进行优化吧...
QStr="Dream.2017@qq.com";

Validation(QStr);

  代码部分:

void MainWindow::Validation(QString QStr)
{
    //手机号
    QRegExp rC("^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$");
    //邮箱
    QRegExp rE("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$");
    //匹配在这里填:int参数可以有0、1、2
    QRegExpValidator regs(rE, 0);
    QString pNum = QStr;
    int pos = 0;
    QValidator::State res = regs.validate(pNum, pos);
    if (QValidator::Acceptable == res) {

        ui->Edit_Access->setText("OK");
    }
    else {
        ui->Edit_Access->setText("NO");
    }

}

截取字符串:

//需要自己测一下
QRegExp rxlen("(\\d+)(?:\\s*)(cm|inch)");
int pos = rxlen.indexIn("Length: 189cm");
if (pos > -1) {
    QString value = rxlen.cap(1); // "189"
    QString unit = rxlen.cap(2);  // "cm"
    // ...
}

      开头的^表示必须以[0-9]+开头,结尾的$表示必须以字母c结尾,如果输入的是123a,则返回QValidator::Intermediate,表示部分匹配,如果输入的是233abc,则完全匹配。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

双子座断点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值