创建正则表达式
1.字面量 var reg = /字符串/gi;
2.构造函数 var reg = new RegExp(“字符串”,“gi”);
- var reg = new RegExp(变量,“gi”);
- g 全局匹配
- i 不区分大小写
3.字符串的方法:
(1) indexOf(keyword[,startIdx])
- 返回第一次匹配字符在字符串中的索引,匹配不到返回-1
(2) search(keyword)
- 返回第一次匹配字符在字符串中的索引,支持正则表达式
(3) match(字符串||正则)
- 默认匹配字符串,返回一个数组
- 0: 所匹配的字符
- index:匹配第一个字符所在的索引
- input:对字符串的引用
//例如输出:
[ "3", index: 34,
input: "Today t taa isxingdfdgg qi 8.今天_星期3,我必须看到会飘的雪花",
groups: undefined ]
0: "3"
groups: undefined
index: 34
input: "Today t taa isxingdfdgg qi 8.今天_星期3,我必须看到会飘的雪花"
备注:全局匹配(g),返回一个所有满足匹配条件的字符串组成的数组,如果匹配不到则返回null
正则匹配规则
-
字符类
(1) . 匹配换行外的任意字符
(2) \d 数字0-9 \D 非数字
(3) \s 空格
(4) \b 匹配数字或单词边界(空格、汉字)
(5) \w : 代表数字或字母或下划线
(6) \W : 非数字字母和下划线字符
(7) \B : 匹配非单词边界。 -
特殊符号
(1) []: 代表任意“单个字符” ,里面的内容表示“或”的关系
①- 代表范围[a-b]
②^ 代表非[^a]
(2) ()表示分组(n是以左边括号出现的顺序排列)
① $1 表示第一个分组
②$2 表示第n个分组(不能写在正则表达式里)
③\n 在正则分组后面使用,表示对第n个分组的引用(一定要写在正则表达式里)
(3) | 表示或者
(4) 锚点定位
①^ 表示以什么开头
②$ 表示以什么结尾
(5) 表示数量
① * 代表0个或0个以上 <>{0,}
② + 代表1个或1个以上 <>{1,}
③ ? 代表0个或1个 <==>{0,1}
④ {} 表示数量,默认贪婪模式(会尽可能多的去匹配结果)
1) {a} 表示匹配a个
2) {a,} 表示匹配a个及以上
3) {a,b} 表示匹配a到b个
4) {1,}? 非贪婪模式,尽可能少的匹配
- Unicode编码中的汉字范围
/^[\u2E80-\u9FFF]+$/
- 正则表达式的属性和方法
a) 测试正则表达式用test方法,返回布尔值
(1) 格式:正则表达式.test(字符串)
(2) 用<正则表达式>测试<字符串>是否匹配,返回true/false
//例163邮箱正则:
var email = document.getElementById('email').value;
if(!/^[a-zA-Z][\w\-\.]*@[\da-z\-]{1,63}(\.[a-z]{2,3})+$/.test(email)){
alert("你的邮箱不满足条件");
return false;//阻止默认行为
}
//涵盖常用邮箱正则:
if(!/^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/.test(email)){
alert("你的邮箱不满足条件");
return false;//阻止默认行为
}
//例用户名正则:
//验证账号:
// 不能为空,
// 不能使用特殊字符(只能使用数字、字母、下划线、横杠),
// 必须以字母开头,
// 长度6-20
var username = document.getElementById('username').value;
if(!/^[a-z][\w\-]{5,19}$/i.test(username)){
alert("你的用户名不满足条件");
return false;//阻止默认行为
}
//例手机号正则
var phone = document.getElementById('phone').value;
if(!/^1(3|4|5|6|7|8|9)\d{9}$/.test(phone)){
alert("你的电话号码不满足条件");
return false;//阻止默认行为
}
//例身份证正则
var identity = document.getElementById('identity').value;
if(!/^(?:\d{14}|\d{17})[\dX]$/.test(identity)){
alert("你的身份证不满足条件");
return false;//阻止默认行为
}
//昵称只能输入3-6个中文
var nickname = document.getElementById('nickname').value;
if(!/^[\u2E80-\u9FFF]{3,6}$/i.test(nickname)){
alert("你的昵称不满足条件");
return false;//阻止默认行为
}
//中文名字正则,以汉字开头以汉字结尾
var name = document.getElementById('name').value;
if (!/^[\u4e00-\u9fa5]+(·[\u4e00-\u9fa5]+)*$/.test(name)) {
alert("你的名字不满足条件");
return false;//阻止默认行为
}