正则表达式(Regular Expression )是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象。
作用
正则表通常被用来检索、替换那些符合某个模式(规则)的文本,例如验证表单∶用户名表单只能输入英文字母、数字或者下划线,昵称输入框中可以输入中文(匹配)。此外,正则表达式还常用于过滤掉页面内容中的些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等。
特点
灵活性、逻辑性和功能性非常的强。
可以迅速地用极简单的方式达到字符串的复杂控制。
创建正则表达式的方式
- 通过调用RegExp对象的构造函数创建
2、利用字面量创建正则表达式
测试正则表达式test
test()正则对象方法,用于检测字符串是否符合该规则,该对象会返回符合true或不符合false,其参数是测试字符串。
regexobj.test (str)
- regexobj是写的正则表达式
- str_我们要测试的文本
- 就是检测str文本是否符合我们写的正则表达式规范.
正则表达式的组成
一个正则表达式可以由简单的字符构成,比如/abc/,也可以是简单和特殊字符的组合,比如/ab*c/。其中特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专用符号,如^、$、+等。
//边界符^ $
正则表达式里面不需要加引号不管是数字型还是字符串型
var reg=/abc/;
//只要包含abc这个字符串返回的都是true
console.log(reg.test('abc')//true
console.log(reg.test('abcb')//true
console.log(reg.test('aabcb')//true
var reg=/^abc/
判断是否已abc为开头是返回true不是返回false
var reg=/^abc$/
精准匹配 必须是abc字符串才符合规范
var reg=/[abc]/; //只要包含a或者b或者c其中一个都返回true
console.log(reg.test('andy')//true
console.log(reg.test('baby')//true
console.log(reg.test('cat')//true
console.log(reg.test('red')//false
字符类: [] 表示有一系列字符可供选择,只要匹配其中一个就可以了
var reg=/^[abc]$/; // 三选一 只有是 a 或者是 b 或者是 c 这三个字母才会返回true
console.log(reg.test('a')//true
console.log(reg.test('b')//true
console.log(reg.test('c')//true
其他全是false
[-]方括号内部范围符-
var reg = /^[a-z]$/; // 26个英文字母任何一个字母返回 true
输入非字母或者大写字母全是false
字符组合
var reg = /^[a-zA-Z0-9_-]$/;
// 26个英文字母(大写和小写都可以)0-9之间的数 _和-任何一个字母或数字以及字符返回true
console.log(reg.test("a"))//true
console.log(reg.test("B"))//true
console.log(reg.test("8"))//true
console.log(reg.test("-"))//true
console.log(reg.test("_"))//true
console.log(reg.test("!"))//false
//如果中括号里面有^表示取反的意思千万和我们边界符^别混淆
[^]取反符
var reg = /^[^a-zA-Z0-9_-]$/;
console.log(reg.test("a"))//false
console.log(reg.test("B"))//false
console.log(reg.test("8"))//false
console.log(reg.test("-"))//false
console.log(reg.test("_"))//false
console.log(reg.test("!"))//true
量词符
用来设定某个模式出现的次数
简单来说 就是让下面的a这个字符重复多少次
// * 相当于 >=0 可以出现0次或者很多次
返回的都是false
// + 相当于 >=1 可以出现1次或者很多次
// ? 相当于 1 || 0
// {3 } 就是重复出现3次
// {3, } 就是重复出现大于等于3次
// {3,16} 就是重复出现大于等于3次并且小于等于16
量词是设定某个模式出现的次数
var reg = /^[^a-zA-Z0-9_-]{6,16}$/;
//{6,16}中间不要有空格
设置完量词后我们就可以输出多个在范围内的字符串了
括号总结
//中括号字符集合.匹配方括号中的任意字符.
//大括号量词符.里面表示重复次数
如果只有一个a的话就,只有输入aaa 正则表达式才会输出true
//小括号表示优先级
只有第二个才是true另外俩是false
正则表达式预定义类
预定类 | 说明 |
\d | 匹配0-9之间的任一数字,相当于[0-9] |
\D | 匹配0-9以外的字符,相当于[^0-9] |
\w | 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_] |
\W | 除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_] |
\s | 匹配空格(包括换行符、制表符、空格符等),相等于[ \t\r\n\v\f] |
\S | 匹配非空格的字符,相当于[^\t\r\n\v\f] |
座机号码验证
//座机号码验证:全国座机号码﹐两种格式:010-12345678或者0530-1234567
//正则里面的或者符号 |
var reg=/^\d{3}-\d{8}|\d{4}-\d{7}$/
简化写法
var reg=/^\d{3,4}-\d{7,8}$/
{3,4}可以是3位也可以是4位
常用正则表达式
检验数字的表达式
- 数字:^[0-9]*$
- n位的数字:^\d{n}$
- 至少n位的数字:^\d{n,}$
- m-n位的数字:^\d{m,n}$
- 零和非零开头的数字:^(0|[1-9][0-9]*)$
- 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$
- 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$
- 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
- 有两位小数的正实数:^[0-9]+(\.[0-9]{2})?$
- 有1~3位小数的正实数:^[0-9]+(\.[0-9]{1,3})?$
- 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
- 非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
- 非负整数:^\d+$ 或 ^[1-9]\d*|0$
- 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
- 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
- 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
- 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
- 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
- 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
检验字符的表达式
- 汉字:^[\u4e00-\u9fa5]{0,}$
- 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
- 长度为3-20的所有字符:^.{3,20}$
- 由26个英文字母组成的字符串:^[A-Za-z]+$
- 由26个大写英文字母组成的字符串:^[A-Z]+$
- 由26个小写英文字母组成的字符串:^[a-z]+$
- 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
- 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
- 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
- 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
- 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
- 禁止输入含有~的字符:[^~]+
特殊需求表达式
- 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[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$ 或者regtel = /^1[3|4|5|7|8]\d{9}$/;
- 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
- 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
- 电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号): ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
- 身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
- 帐号是否合法(字母开头,允许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])[a-zA-Z0-9]{8,10}$
- 强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
- 日期格式:^\d{4}-\d{1,2}-\d{1,2}
- 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
- 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
- 钱的输入格式:
-
- 有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
- 这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
- 一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
- 这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
- 必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
- 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
- 这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
- 1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
- 备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
- xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
- 中文字符的正则表达式:[\u4e00-\u9fa5]
- 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
- 空白行的正则表达式:\n\s*\r (可以用来删除空白行)
- HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*? /> ( 首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
- 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
- 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
- IPv4地址:((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}
- 年龄值:0-120 : /^([0-9]|[1-9]\d|1[01][0-9]|120)$/ 或 /^([1-9]|1[01])?\d$ |^120$/
-
另收集其他正则
-
1、手机号码:/^(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}$/
2、国内电话号码:/\d{3}-\d{8}|\d{4}-\d{7}/
3、身份证号:/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
或者 /^[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]$/
4、用户名:/^[a-zA-Z0-9_]{4,16}$/ (4-16位,由数字、子母下划线组成)
5、电子邮箱:/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/
6、日期:简单判定:/^\d{4}(\-)\d{1,2}\1\d{1,2}$/
7、QQ号:/^[1-9][0-9]{4,10}$/ (5-11位)
8、微信号: /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/(6至20位,以字母开头,由字母,数字,减号,下划线组成)
9、密码强度:/^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/(最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符)
10、正整数:/^\d+$/
11、负整数:/^-\d+$/
12、整数:/^-?\d+$/
13、正数:/^\d*\.?\d+$/
14、负数:/^-\d*\.?\d+$/
15、数字:/^-?\d*\.?\d+$/
16、URL:/^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
17、ipv4地址:/^(?:(?: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]?)$/
18、十六进制颜色:/^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/
19、车牌号:/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/
20、包含中文:/[\u4E00-\u9FA5]/