js正则基础总结和工作中常用验证规则
知识是需要系统的。就像js正则用了那么多次,却还是浑浑噩噩,迫切需要来一次整理,那么来吧!
基本知识
元字符
- \d 匹配数字等于[0-9]
- \w 匹配字母、数字、下划线、中文
- \s 匹配任意空白字符
- . 匹配除了换行符以外的任意字符
- ^ 匹配开始
- $ 匹配结束
- \b 匹配开始或结束
//元字符的使用
/^\d$/ 匹配一个数字
/^\w/ 匹配开头是字母、数字、下划线或汉字
/^\s$/ 匹配一个空白符
/\bhi\b/匹配hi
重复字符
- *匹配0次或多次
- ?匹配0次或1次
-
- 匹配1次或多次
- {n}匹配n次
- {m,}匹配最少m次
- {n,m}匹配n到m次
//重复字符的使用
/^\d*/ 匹配数字0次或多次
/^\d?$/ 出现数字一个或0次
/^\d+$/ 匹配数字一次或多次
/^\d{3}$/ 数字出现三次890 078...
/^\d{3,}$/ 匹配最少3次
/^\d{3,5}$/ 匹配数字3-5次
转义字符
\ 比如匹配*,而*在正则中匹配0个或多个,所以匹配*本身需要用 \*
在匹配域名的时候
ljmfitness.com /^ljmfitness\.com$/,在其中\.为转义字符
C:\windows 用 /^C:\\windows$/来匹配
反义
-
\W 匹配除字母、数字、下划线、汉字的字符
-
\S 匹配除空白符意外的任意字符
-
\D 匹配出数字外的任意字符
-
\B 匹配不是开始和结束的位置
-
[^x] 匹配除了x外的任意字符
-
[^xsa] 匹配除了xsa 这几个字符以外的任意字符
分支(类似于或)
/1234|abcd/ 这个表达式匹配含1234的字符串或者abcd的字符串
注:字符串从左到右验证,当字符串满足前一部分(1234)时,就不再验证后一部分了(abcd)
分组
当一种情况出现重复多次,我们可以选择分组
比如:/(22\.){3}/ 匹配含22.22.22.
/((2[0-4]\d|25[0-5]|[01]?\d\d)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d)/ 匹配ip地址
后向引用
/\b(\w+)\b\s+\1\b/ 这个匹配重复的单词go go
首先\w+ 匹配一个单词 \s空白字符 \1匹配\w
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
var str1 = "bedroom";
var str2 = "bedding";
var reBed = /(bed(?=room))///在我们捕获bed这个字符串时,抢先去看接下来的字符串是不是room
alert(reBed.test(str1));//true
alert(reBed.test(str2));//false
var str1 = "bedroom";
var str2 = "bedding";
var reBed = /(bed(?!room))/ //要来它后面不能是room
alert(reBed.test(str1))//false
alert(reBed.test(str2))//true
常用正则整理
- 手机号码
方法一:
<input type="text" id="demo" value=""/>
var str = document.getElementById('demo').value;
var reg = /^1[34578]\d{8}$/;
if(reg.test(str)){
alert('验证通过')
}else{
alert('验证不通过')
}
方法二:
var str = '23232434';
var reg = /^\d*$/
if(str.match(reg)){
console.info('验证通过')
}else{
console.info('验证不通过')
}
- 邮箱
/^([a-zA-Z0-9]+[-|_|\.]?)*[a-zA-Z0-9]+@([A-Za-z0-9]+[-|_|\.]?)*[a-zA-Z0-9]+\.[A-Za-z]{2,3}$/;
- 密码
//字母数字下划线组成6-20位
/^[a-zA-Z0-9_]{6,20}/
//验证密码同时包含字母数字特殊字符混合8-20位
/^(?=.*\d)(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,20}$/
- 验证码
//四位数字
/^\d{4}$/
//四位数字或字母
/^[0-9a-zA-Z]{4}/
//四位字母
/^[a-zA-Z]{4}/
- 验证身份证号
/^\d{15}|\d{17}[x|X|\d]$/
- 验证中国企业名称(中文,或中文+小括号)
/^[\(|()]?[\u4e00-\u9fa5]+[\(|\(|\)|\)]?[\u4e00-\u9fa5]*[\(|\(|\)|\)]?[\u4e00-\u9fa5]+[\)\)]?$/