QT正则表达式

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


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

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


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

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


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

常用正则表达式 :

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

^[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- ./?%&=]*)?
   
   

经度的范围(-180,180): 保留8位小数的正则表达式:

^-?(180|1?[0-7]?\\d(\\.\\d{1,8})|[1-9]?\\d(\\.\\d{1,8})?)$
   
   

纬度的范围(-90,90): 保留8位小数的正则表达式:

^-?(90|[1-8]?\\d(\\.\\d{1,8})?)$
   
   

高度的范围(-1000000,1000000): 保留8位小数的正则表达式:

^-?(1000000|1?\\d{1,6} (\\.\\d{1,8})?)$
   
   

或者使用 QIntValidator 和 QDoubleValidator 来限制输入数值范围:


   
   
  1. QIntValidator* validator = new QIntValidator( -180, 180, this);
  2. ui->lineEdit-> setValidator(validator);

IP正则匹配:


   
   
  1. QRegExp regExp("(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)");
  2. if(!regExp. exactMatch(ip)) {
  3. flag = false;
  4. }
  5. else
  6. flag = true;

 

输入框:由数字和字母组成,并且要同时含有数字和字母,且长度要在8-16位之间。


   
   
  1. 要求:由数字和字母组成,并且要同时含有数字和字母,且长度要在 8 -16位之间。
  2. ^(?![ 0 -9]+$)(?![a-zA-Z]+$)[ 0 -9A-Za-z]{ 8, 16}$
  3. 分开来注释一下:
  4. ^ 匹配一行的开头位置
  5. (?![ 0 -9]+$) 预测该位置后面不全是数字
  6. (?![a-zA-Z]+$) 预测该位置后面不全是字母
  7. [ 0 -9A-Za-z] { 8, 16} 由 8 -16位数字或这字母组成
  8. $ 匹配行结尾位置
  9. 注:(?!xxxx) 是正则表达式的负向零宽断言一种形式,标识预该位置后不是xxxx字符。
  10. 附:
  11. 要求:可以包含数字、字母、下划线,并且要同时含有数字和字母,且长度要在 8 -16位之间。
  12. ^(?![ 0 -9]+$)(?![a-zA-Z]+$)[ 0 -9A-Za-z_]{ 8, 16}$

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


   
   
  1. //检验密码强度,在点击确认后调用.
  2. bool IsMatchRegX(const QString& str)
  3. {
  4. QString reg = "^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$";
  5. QRegExp rx(reg);
  6. bool ok = rx. exactMatch(str);
  7. return ok;
  8. }
  9. /*
  10. 必须包含一个大写,一个小写字母,且长度为8到16位
  11. ^(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9~!@&%#_]{8,16}$
  12. 必须包含一个大写,一个小写字母,一个特殊字符,且长度为8到16位
  13. ^(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@&%#_])[a-zA-Z0-9~!@&%#_]{8,16}$
  14. 必须包含一个大写,一个小写字母,一个数字,一个特殊字符,且长度为8到16位
  15. ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[~!@&%#_])[a-zA-Z0-9~!@&%#_]{8,16}$
  16. */

 

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

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

 

正则表达式 Qt 的double类型转成QString类型并去掉小数后多余的0 , 且将末尾数字进行四舍五入(让很长的数字不以科学记数法显示)。


   
   
  1. QRegExp rx;
  2. rx. setPattern( "(\\.){0,1}0+$");
  3. double double01 = 15648.120000;
  4. double double02 = 15648.000000
  5. QString ceshi01 = QString( "%1"). arg(double01, 0, 'f', -1). replace(rx, "");
  6. QString ceshi02 = QString( "%1"). arg(double02, 0, 'f', -1). replace(rx, "");
  7. //在保留几位小数后面也可以去掉末尾的所有 0
  8. // MJ是末尾有很多0的数,spinVal是保留几位小数,rx是上面的正则.
  9. double MJ = m_query. value( 0). toDouble();
  10. QString val = QString( "%1"). arg(MJ, 0, 'f',spinVal). replace(rx, "");

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


   
   
  1. //第一种方法
  2. QRegExp regxName("^0\.[0-9]*[1-9]$");
  3. QValidator *validatorName = new QRegExpValidator(regxName);
  4. ui->lineEdit-> setValidator(validatorName);
  5. //第二种方法
  6. QRegExp regxName("^0\.[0-9]*[1-9]$");
  7. QValidator *validatorName = new QRegExpValidator(regxName);
  8. ui->lineEdit-> setValidator(validatorName);
  9. //第二种方法(感觉这个不错)
  10. QRegExp regxName("^(0([\.]\d*[0-9]+)|0|1)$");
  11. QValidator *validatorName = new QRegExpValidator(regxName);
  12. ui->lineEdit-> setValidator(validatorName);

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


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

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


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

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


   
   
  1. //这个只能输入整数和小数 (正数)
  2. QRegExp regx("^[0-9]+([.]{1}[0-9]+){0,1}$");
  3. //这个只能输入负的整数和负的小数 (负数)
  4. QRegExp regx("^-[0-9]+([.]{1}[0-9]+){0,1}$");
  5. //这个可以输入正的整数和小数还能输入负的整数和小数 (正数与负数)
  6. QRegExp regx("^-[0-9]+([.]{1}[0-9]+){0,1}|[0-9]+([.]{1}[0-9]+){0,1}$");
  7. QValidator *validatorName = new QRegExpValidator(regx);
  8. ui->lineEdit-> setValidator(validatorName);

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


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

 正则表达式,从字符串“-3.14℃”、“3.14℃”、“314℃”的这几种格式的字符串中提取出前面的小数部分,包括负号:

b60cd71bf735488b884b4cda2aef1461.jpg

 

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

 

 

62543022dead41cf8f0362c1a507e6aa.gif

苏菲,你很漂亮啊!

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值