正则表达式
简介
正则的作用:
*1、表单验证(检测用户名、密码等是否符合规范)
2、查找字符串
3、查找替换并替换
定界符
/正则规则/
原子
1、每一个字符都称为一个原子(数字、字母、下划线以及任何符号,包括空格)
2、每一个[]代表一个原子,中括号内为可选字符
[]号内的简写:
[0-9]代表0-9的任意一个数
[0-9A-Za-z_]代表数字、字母、下划线中的任意一个字符
注意:在[]内开头出现^,代表除了[]内以外的字符
3、{}代表重复匹配前面的原子
{m}重复匹配前面的原子m次
{m,n}重复匹配前面的原子至少m次,至多n次
{m,}重复匹配前面的原子至少m次
特殊的原子:
\d 代表0-9的任意一个数 相当于[0-9]
\D 代表除了0-9以外的任意字符 相当于[^0-9]
\w 代表数字、字母、下划线中的任意一个字符 相当于[0-9A-Za-z_]
\W 代表除了数字、字母、下划线以外的任意一个字符 相当于[^0-9A-Za-z_]
\s 代表所有的空白符(如:空格、换行、制表符)
\S 代表除了空白符以外的任意字符
元字符
. 代表任意一个字符
* 代表重复匹配前面的原子任意次 相当于{0,}
? 代表重复匹配前面的原子至少0次,至多1次 相当于{0,1}
+ 代表重复匹配前面的原子至少一次 相当于{1,}
模式修正符
i 不区分大小写
g 全局匹配
m 识别换行符
注意:模式修正符放置在定界符之外
定义正则表达式
// 方式一:通过定界符定义(推荐使用)
var pattern = /aaa/;
// 方式二:通过对象原型定义
var pattern = new RegExp('aaa');
严格模式
^必须以指定的字符开头 $必须以指定的字符结尾
必须完全符合正则表达式规则,才会验证通过
var pattern = /^[0-9A-Za-z_]{6}$/
贪婪模式
var pattern = /<li>.*<\/li>/;
var str = '<li>百事可乐</li><li>珍珠奶茶</li>';
var res = pattern.exec(str);
console.log(res)//<li>百事可乐</li><li>珍珠奶茶</li>
// 取消贪婪模式 .*?
var pattern = /<li>.*?<\/li>/;
var str = '<li>百事可乐</li><li>珍珠奶茶</li>';
var res = pattern.exec(str);
console.log(res)//<li>百事可乐</li>
正则的函数
exec()检测是否符合正则规则,将符合的部分以数组返回,不符合则返回null
语法:pattern.exec(str)
*test() 检测是否符合正则规范,返回Boolean值 符合->true 不符合->false
语法:pattern.test(str)
search()验证是否符合正则规则,返回字符第一次出现的下标
语法:str.search(pattern)
match()检测是否符合正则规范,将所有符合的内容全部以数组方式返回
(配合模式修正符g使用)
语法:str.match(pattern)
replace()将所有符合正则规则的内容进行替换
语法:str.replace(pattern,替换后的内容)
中文匹配
\u4e00-\u9fa5 中文的范围
var pattern = /[\u4e00-\u9fa5]/;代表任意的一个中文
常用的正则验证
用户名
//用户名由4-20中文、字母、数字、下划线组成
var pattern=/^([a-zA-Z0-9_-]|[\u4E00-\u9FA5]){4,20}$/
密码
//密码正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
var pattern=/^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/
整数
//正整数正则
var posPattern = /^\d+$/;
//负整数正则
var negPattern = /^-\d+$/;
//整数正则
var intPattern = /^-?\d+$/;
数字
//正数正则
var posPattern = /^\d*\.?\d+$/;
//负数正则
var negPattern = /^-\d*\.?\d+$/;
//数字正则
var numPattern = /^-?\d*\.?\d+$/;
邮箱
var emailPattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
手机号
var mobilePattern = /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}$/;
身份证号
//身份证号(18位)正则
//11010519880605371X
var cP = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
日期正则
//日期正则,简单判定,未做月份及日期的判定
var dP1 = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/;
//输出 true
console.log(dP1.test("2017-05-11"));
//输出 true
console.log(dP1.test("2017-15-11"));
//日期正则,复杂判定
var dP2 = /^(?:(?!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)$/;
//输出 true
console.log(dP2.test("2017-02-11"));
//输出 false
console.log(dP2.test("2017-15-11"));
//输出 false
console.log(dP2.test("2017-02-29"));
QQ号
//QQ号正则,5至11位
var qqPattern = /^[1-9][0-9]{4,10}$/;
微信号
//微信号正则,6至20位,以字母开头,字母,数字,减号,下划线
var wxPattern = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/;
车牌号
//车牌号正则
var cPattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;