正则表达式

4 篇文章 0 订阅

参考:https://blog.csdn.net/Superman___007/article/details/88637899

常用正则表达式

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

^[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})?)$

IP正则匹配:

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]?)");
if(regExp.exactMatch(ip)) 
{
	//与正则表达式匹配
    flag = true;
}
else
{
   flag = false;
}

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

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

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

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

校验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);

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

//这个只能输入整数和小数 (正数)
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);

其它常用正则表达式:
https://www.cnblogs.com/Agui520/p/8206034.html

正则表达式介绍:

1. 元字符(常用)
元字符匹配内容
.匹配除换行符以外的任意字符
\w匹配所有普通字符(数字、字母或下划线)
\s匹配任意的空白符
\d匹配数字
\n匹配换行符
\t匹配制表符
\b匹配一个单词的结尾
^匹配字符串的开始位置
$匹配字符串的结尾位置
\W匹配非字母或数字或下划线
\D匹配非数字
\S匹配非空白符
a|b匹配字符 a 或字符 b
()正则表达式分组所用符号,匹配括号内的表达式,表示一个组。
[…]匹配字符组中的字符
[^…]匹配除了字符组中字符的所有字符
2. 量词

正则表达式量词

量词用法说明
*重复0次或者更多次
+重复一次或者更多次
重复0次或者一次
{n}重复n次
{n,}重复n次或者更多次
{n,m}重复n到m次
3. 贪婪模式非贪婪模式

正则表达式默认为贪婪匹配,也就是尽可能多的向后匹配字符,比如{n,m}表示匹配前面的内容出现n到m次(n小于m),在贪婪模式下,首先以匹配m次为目标,而在非贪婪模式是尽可能少的向后匹配内容,也就是说匹配n次即可。

贪婪模式转换为非贪婪模式的方法很简单,在元字符后添加“?”即可实现,如下所示:

元字符(贪婪模式)非贪婪模式
**?
++?
??
{n,m}{n,m}?
4. 正则表达式转义

如果使用正则表达式匹配特殊字符时,则需要在字符前加\表示转意。常见的特殊字符如下:

*   +   ?   ^   $   []   ()   {}  |   \
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值