正则表达式(Regular Expression)由一些普通字符和特殊字符组成,是描述字符串规则的表达式,用于匹配字符串组合的规则,同时正则表达式本身也是一个对象。
正则表达式特点:
var 变量名 = /表达式/[模式修饰符]
var reg = new RegExp('正则表达式','匹配模式')
使用这个方法可以检测一个字符串是否复合正则表达式的规则
如果符合返回true,否则返回false。
模式修饰符
g:实现全局匹配
i:忽略大小写
m:实现多行匹配
u:以Unicode编码执行正则表达式
边界符
^:匹配行首的文本(以给定字符开头)
$:匹配行尾的文本(以给定字符结尾)
var reg3 = /^abc$/
console.log(reg3.test('abc'))//true
console.log(reg3.test('abcd'))//false
console.log(reg3.test('abcabc'))//false
注意: 如果在正则表达式中同时使用了^ $则要求字符串完全符合正则表达式。
常见预定义符
.:表示匹配除了'\n'以外的任何单个字符
\d: 匹配0-9之间的任意字符 相当于[0-9]
\D:匹配0-9之外的任意字符 相当于[^0-9]
\w: 匹配任意的数字、字母、下划线 相当于[a-zA-Z0-9_]
\W:匹配任意的数字、字母、下划线以外的所有字符 相当于[^a-zA-Z0-9_]
\s: 匹配空格
\S:匹配非空格
转义字符
\ 可以将正则表达式中的边界符 预定义符 修饰符转换为普通字符使用
\. 表示 .
\\ 表示 \
注意:因为RegExp的模式参数是字符串,所以某些情况下需要二次转义,所有元字符必须二次转义,包括转义字符序列。
var s1 = '^abc\\1./23*edf&';
var reg5 = /\.|\$|\*|\^|\\/gi;
console.log(s1.match(reg5));
[cat]:匹配字符集合中任意一个c、a、t
[^cat]:匹配除c、a、t之外的字符
[A-z]: 匹配任意大小写字母
[A-Z]:匹配所有大写字母
[^A-Z]:匹配除了大写字母之外的其他字符
[a-z]:匹配所有小写字母
[^a-z]: 匹配除了小写字母之外的其他字符
[a-zA-Z0-9]:匹配任意字母和数字
[^a-zA-Z0-9]:匹配除了数字、字母之外的字符
[\u4e00-\u9fa5]:匹配所有的中文字符
量词符:
? 匹配 ?前面的字符0次或1次
+ 匹配 + 前面的字符1次或多次
* 匹配 * 前面的字符0次或多次
{
n} 匹配 {
} 前面的字符n次
{
n,} 匹配 {
} 前面的字符至少n次
{
m,n} 匹配 {
} 前面的字符m~n次
取反符:
[] 和 ^结合使用 即 ^[]
括号字符:
catch|er 只能匹配catch或er
cat(ch|er) 能匹配的是 catch cater
abc{
2} 能够匹配的是 abcc
a(bc){
2} 能匹配的是 abcbc
在String中有许多方法可以搭配正则表达式来使用更加便捷
var str = '1a2b3cc4d5e6f7';
var result = str.split(/[A-z]/);
console.log(result);// ["1", "2", "3", "", "4", "5", "6", "7"]
str = 'hello abc hello abc';
result = str.search(/abc/);
console.log(result);// 6
str = '1aaaa2b3cc4d5e6f78AB9C0D';
result = str.match(/[A-z]/gi);
console.log(result);// ["a", "a", "a", "a", "b", "c", "c", "d", "e", "f", "A", "B", "C", "D"]
str = '1aaaa2b3cc4d5e6f78AB9C0D';
result = str.replace(/[A-z]/gi,'');//使用正则表达式将所有字母用''替换
console.log(result);// 1234567890
正则表达式优先级由高到低依次是:转义字符、圆括号、中括号、限定符、定位点和序列、或操作
<style>
#username{
margin-left: 15px;
}
#psw{
margin-left: 12px;
}
button{
margin-left: 40px;
}
.wrong{
color: red;
}
.right{
color: green;
}
</style>
</head>
<body>
<form action="">
用户名:<input type="text" id="username"><span></span>
<br><br>
密 码:<input type="password" id="psw">
<br><br>
确认密码:<input type="password" id="psw2"><span id="measure"> </span>
<br><br>
<button type="button">注册</button>
<button type="reset">重置</button>
</form>
<script>
var reg = /^[A-Za-z0-9_-]{6,16}$/ // 匹配用户名
var reg2 = /^[A-Za-z0-9_-]{8,16}$/ // 匹配密码
var uname = document.querySelector('#username');
var psw = document.querySelector('#psw');
var psw2 = document.querySelector('#psw2');
var sp = document.querySelector('span');
var btn = document.querySelector('button');
var mea = document.querySelector('#measure');
uname.addEventListener('blur',function(){
if(reg.test(this.value)){
sp.className = 'right';
sp.innerHTML = '用户名可用';
}else{
sp.className = 'wrong';
sp.innerHTML = '用户名不可用';
}
})
btn.addEventListener('click',function(){
if(psw.value == psw2.value && reg2.test(psw.value&&psw2.value)){
mea.className = 'right';
mea.innerHTML = '密码可用';
}else{
mea.className = 'wrong';
mea.innerHTML = '密码不可用';
}
})
</script>
IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){
3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))
Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
域名:[a-zA-Z0-9][-a-zA-Z0-9]{
0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
手机号码:^(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}$
身份证号(15位、18位数字):^\d{
15}|\d{
18}$
.
短身份证号码(数字、字母x结尾):^([0-9]){
7,18}(x|X)?$ 或 ^\d{
8,18}|[0-9x]{
8,18}|[0-9X]{
8,18}?$
帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{
4,15}$
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{
5,17}$
强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{
8,10}$
日期格式:^\d{
4}-\d{
1,2}-\d{
1,2}
中国邮政编码:[1-9]\d{
5}(?!\d) (中国邮政编码为6位数字)