Qt中正则表达式(常用)

在Qt中使用正则表达式得方式 :

QRegExp regxName("^[0-9a-zA-Z_]+$");
QValidator *validatorName = new QRegExpValidator(regxName);
ui->lineEdit->setValidator(validatorName);    //ui为lineEdit的控件

正则表达式提取字符串中的数字方法 :

QString WndName("WndName1"); 
QRegExp rx("\\d+");
QString wndIndex;
rx.indexIn(WndName,0);
wndIndex=rx.cap(1);
qDebug()<

正则表达式从一个字符串里提取特定的字段或数据 例如从"a=100"里提取"a"和"100" :

QString pattern("(.*)=(.*)");  
QRegExp rx(pattern);  
  
QString str("a=100");  
int pos = str.indexOf(rx);              // 0, 第一个的位置
                                        // 如果找不到str,则返回-1
                                        // 你也可以使用rx.indexin(str)
qDebug() << pos;  
if ( pos >= 0 )  
{  
    qDebug() << rx.matchedLength();     // 5, 匹配字符串到最后的长度
                                        // 或者-1如果没有匹配
    qDebug() << rx.capturedTexts();     // QStringList("a=100", "a", "100"),  
                                        //   0: 文本匹配模式
                                        //   1: 第一个()捕获的文本
                                        //   2: 第二个文本的捕获 
  
    qDebug() << rx.cap(0);              // a=100, 文本匹配模式  
    qDebug() << rx.cap(1);              // a, 第n个()捕获的文本  
    qDebug() << rx.cap(2);              // 100,  
  
    qDebug() << rx.pos(0);              // 0, 第n个捕获文本的位置
    qDebug() << rx.pos(1);              // 0  
    qDebug() << rx.pos(2);              // 2  
}

常用正则表达式 :

只允许输入数字英文字符和下划线 :   

^[0-9a-zA-Z_]+$

只允许输入数字英文字符和下划线以及中文字符 :   

^[A-Za-z0-9_\u4e00-\u9fa5]+$

只能以英文字符开头,后面包含英文字符数字下划线 :   

^[a-zA-Z][a-zA-Z0-9_]+$

第一个字符以英文字符开头,第二个字符以数字开头,后面包含英文字符数字下划线 :   

^[a-zA-Z][0-9][a-zA-Z0-9_]+$

校验基本日期格式如 2019/3/18 or 2019-03-18 的格式 :   

^(\\d{1,4})(-|\\/)(\\d{1,2})\\2(\\d{1,2})+$

身份证号码的正则校验18位身份证号码 : 

 ^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)+$

“yyyy-mm-dd“ 格式的日期校验已考虑平闰年 : 

 ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)+$

校验手机号,下面是国内 13、15、18开头的手机号正则表达式 (可根据目前国内收集号扩展前两位开头号码): 

 ^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$

下面的这个表达式可以提取筛选出一段文本中的URL :   

^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)?

校验密码强度,密码的强度必须是包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间。

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

校验E-Mail 地址,同密码一样,下面是E-mail地址合规性的正则检查语句。

[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?

 

正则表达式 Qt 的double类型转成QString类型并去掉小数后多余的0 , 且将末尾数字进行四舍五入。

QRegExp rx;
rx.setPattern("(\\.){0,1}0+$");
double double01 = 15648.120000;
double double02 = 15648.000000
QString ceshi01 = QString("%1").arg(double01,0,'f',-1).replace(rx,"");
QString ceshi02 = QString("%1").arg(double02,0,'f',-1).replace(rx,"");

//在保留几位小数后面也可以去掉末尾的所有 0
// MJ是末尾有很多0的数,spinVal是保留几位小数,rx是上面的正则.
double MJ = m_query.value(0).toDouble();
QString val = QString("%1").arg(MJ,0,'f',spinVal).replace(rx,"");

正则表达式,只能输入0到1之间的小数:

//第一种方法
QRegExp regxName("^0\.[0-9]*[1-9]$");
QValidator *validatorName = new QRegExpValidator(regxName);
ui->lineEdit->setValidator(validatorName);

//第二种方法
QRegExp regxName("^0\.[0-9]*[1-9]$");
QValidator *validatorName = new QRegExpValidator(regxName);
ui->lineEdit->setValidator(validatorName);

//第二种方法(感觉这个不错)
QRegExp regxName("^(0([\.]\d*[0-9]+)|0|1)$");
QValidator *validatorName = new QRegExpValidator(regxName);
ui->lineEdit->setValidator(validatorName);

正则表达式只能输入数字,保留小数点后2位小数的正则表达式 :

想匹配到只精确到小数后3为则把下面的2改为3就行,同理想保留几位改成几就行.
QRegExp regx("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$");
QValidator *validator = new QRegExpValidator(regx);
ui->lineEdit->setValidator(validator);

正则表达式首字符只能输入数字,第二个可以输入任意字符,保留2位小数(这个和上面那个不同, 可以输入如下几种格式->                             [ 1121 ]  [ 13.12 ] [ 1a ] [ 11.2a ] [ 1, ] [ 11.2, ]  就是说首字符为数字,第二个字符为任意字符,可以自己测试下,能不能容忍这种操作):

//设置输入行只能输入数字,保留两位小数
QRegExp reg("^([0-9]{1,14}(\.([0-9]{1,2}$)|\.[1-9]\d?)?)|(0\.(0([1-9]$)|([1-9]+\d?)))$");
QValidator *validator = new QRegExpValidator(reg);
ui->lineEdit->setValidator(validator);

正则表达式只能输入正整数负整数正小数负小数:

//这个只能输入整数和小数 (正数)
QRegExp regx("^[0-9]+([.]{1}[0-9]+){0,1}$");

//这个只能输入负的整数和负的小数 (负数)
QRegExp regx("^-[0-9]+([.]{1}[0-9]+){0,1}$");

//这个可以输入正的整数和小数还能输入负的整数和小数 (正数与负数)
QRegExp regx("^-[0-9]+([.]{1}[0-9]+){0,1}|[0-9]+([.]{1}[0-9]+){0,1}$");

QValidator *validatorName = new QRegExpValidator(regx);
ui->lineEdit->setValidator(validatorName);

 正则表达式输入格式,输入形式 (不包含大括号) :[ 111,111 ] 逗号及后面的那个是可选的 

QRegExp regExp("\\d*\.?\\d+");
QValidator *validator = new QRegExpValidator(regExp);
ui->lineEdit->setValidator(validator);

 说明 : 部分转载自各大平台网站,以作笔记...

 

寒风经过院子里的枝芽,也冷却了我手中的鲜花。《心雨》

 

你可能感兴趣的:(♪,--,Qt)