说明
1.如下的验证规则是在公司项目中总结出来的,有的规则可能不适合您须要自行修改规则。
2.这些规则是本身和同事之前写的,可能不是最新,欢迎提出。html
//用户名正则,4到16位(字母,数字,下划线,减号) var uPattern = /^[a-zA-Z0-9_-]{4,16}$/; //输出 true 例如:xiaohua_qq console.log(uPattern.test("caibaojian")); 复制代码
//密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符 var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/; //输出 true 例如:Kd@curry666 console.log(pPattern.test("Kd@curry666")); // 弱密码(长度是6位如下就算字母、数字、特殊字符三项都包括,强度也是弱的) var pPattern1 = /(?=.{6,}).*$/; // 输出 true console.log(pPattern1.test('asdf')) // 中等强度密码(密码为7位及以上,大小字母、数字三项中有两项,特殊字符无关紧要) var pPattern2 = /^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$/; // 输出 true console.log(pPattern2.test('adb123adg')) // 强密码(长度大于8,必须是字母大写,字母小写,数字,特殊字符组成)(暂未验证) var pPattern3 = /^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$/; // 输出 true console.log(pPattern3.test('Aa123##asd')) 复制代码
// 纯数字正则 var posPattern = /^\d{1,}$/; //输出 true 例如: 12345678 console.log(posPattern.test("42")); 复制代码
// 是否由数字和字母组成正则 var posPattern = /^[A-Za-z0-9]+$/; //输出 true 例如:james666, haha233hi console.log(posPattern.test("james666")); 复制代码
// 纯英文字母正则 var posPattern = /^[a-zA-Z]+$/; //输出 true 例如:Russel console.log(posPattern.test("Russel")); 复制代码
// 纯小写英文字母组成正则 var posPattern = /^[a-z]+$/; //输出 true 例如:russel console.log(posPattern.test("russel")); 复制代码
// 纯大写英文字母正则 var posPattern = /^[A-Z]+$/; //输出 true 例如:ABC, KD console.log(posPattern.test("ABC")); 复制代码
// 只包含中文和数字正则 var numP = /^((?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])|(\d))+$/; // 输出 true 例如:哈哈哈, 你好6啊 console.log(numP.test("哈哈哈")); 复制代码
// 不能包含字母 var numP = /^[^A-Za-z]*$/; // 输出 true 例如:你好6啊, @¥()! console.log(numP.test(" @¥()!")); 复制代码
// 账号是否合法(字母开头,容许5-16字节,容许字母数字下划线组合正则 var numP = /^[a-zA-Z][a-zA-Z0-9_]{4,15}$/; // 输出true 例如:justin, justin1989,justin_666 console.log(numP.test("justin_666")); 复制代码
// 纯中文/汉正则 var numP = /^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/; // 输出true 例如:正则,前端 console.log(numP.test("正则")); 复制代码
// 是否小数正则 var numP = /^\d+\.\d+$/; // 输出true 例如:0.0,0.09 console.log(numP.test("0.09")); 复制代码
//正整数正则 var posPattern = /^\d+$/; //负整数正则 var negPattern = /^-\d+$/; //整数正则 var intPattern = /^-?\d+$/; //输出 true console.log(posPattern.test("42")); //输出 true console.log(negPattern.test("-42")); //输出 true console.log(intPattern.test("-42")); 复制代码
能够是整数也能够是浮点数前端
//正数正则 var posPattern = /^\d*\.?\d+$/; //负数正则 var negPattern = /^-\d*\.?\d+$/; //数字正则 var numPattern = /^-?\d*\.?\d+$/; console.log(posPattern.test("42.2")); console.log(negPattern.test("-42.2")); console.log(numPattern.test("-42.2")); 复制代码
//Email正则 var ePattern = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; //输出 true 例如:27222722@qq.com, ninini@163.com console.log(ePattern.test("ninini@163.com")); 复制代码
// 中国手机号(严谨), 根据工信部2019年最新公布的手机号段 var numP = /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-7|9])|(?:5[0-3|5-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[1|8|9]))\d{8}$/; //输出 true 例如:008618311006933, +8617888829981, 19119255642 console.log(numP.test("19119255642")); // 中国手机号(宽松), 只要是13,14,15,16,17,18,19开头便可 var mPattern = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/; //输出 true 例如:008618311006933, +8617888829981, 19119255642 console.log(mPattern.test("19119255642")); // 中国手机号(最宽松), 只要是1开头便可, 若是你的手机号是用来接收短信, 优先建议选择这一条 var numP1 = /^(?:(?:\+|00)86)?1\d{10}$/; //输出 true 例如:008618311006933, +8617888829981, 19119255642 console.log(numP1.test("19119255642")); //http://caibaojian.com/regexp-example.html 复制代码
规则说明:git
国内手机号码为11位数字,前两位只能为: 13 \ 14 \ 15 \ 17 \ 18
。es6
三大运营商号段分配状况github
号段 | 可选值 |
---|---|
中国移动 | |
13x | 134X(0-8)、13五、13六、13七、13八、139 |
14x | 147(数据卡) |
15x | 150、15一、15二、157X(0-7\9)(TD)、15八、159 |
17x | 182 、18三、18四、187(3G\4G)、188(3G) |
18x | 分机号无关紧要 |
19x | 98(2017-08-16 说明见附录一) |
中国联通 | |
13x | 130、13一、132 |
14x | 145(数据卡) |
15x | 15五、156 |
17x | 176(4G) |
18x | 185(3G)、186(3G) |
16x | 166(2017-08-16 说明见附录一) |
中国电信 | |
13x | 13三、(1349卫通) |
15x | 153 |
17x | 177(4G)、173(最近刚开通) |
18x | 180(3G)、181(3G)、189(3G) |
19x | 199(2017-08-16 说明见附录一) |
虚拟运营商 | |
170 | - |
// 座机号正则(能够不须要区号) var mPhone = /^(0\d{2,3})?(-)?\d{7,8}(-\d{1,6})?$/; //输出 true 例如:23091234 console.log(mPhone.test("23091234")); // 国内座机电话,如: 0341-86091234 var mPhone = /\d{3}-\d{8}|\d{4}-\d{7}/; //输出 true 例如:0936-4211235 console.log(mPhone.test("0936-4211235")); 复制代码
TIP
格式:区号-号码-分机号
微信
类型 | 说明 | 备注 |
---|---|---|
区号 | 区号以0开头,3位或4位 | |
号码 | 号码由7位或8位数字组成 | |
机号 | 分机号码由1-6位数字组成 | |
区号与号码之间能够无链接符,也能够“-”链接 | ||
分机号无关紧要 |
// 一代身份证号(15位数字)正则 var numP = /^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$/; // 输出 true 例如:622001790131123 console.log(numP.test("622001790131123")); 复制代码
// 二代身份证号(18位数字),最后一位是校验位,可能为数字或字符X正则 var nump = /^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$/; // 输出 true 例如:62222319991205131x console.log(nump.test("62222319991205131x")); 复制代码
// 身份证号, 支持1/2代(15位/18位数字)正则 var nump = /(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/; // 输出 true 例如:622223199912051311 console.log(nump.test("622223199912051311")); 复制代码
参考资料markdown
说明
一代身份证自2013年1月1日起中止使用
全国公民身份证号码查询服务中心jsp
var a = /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29))$/; //日期正则,简单断定,未作月份及日期的断定 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")); 复制代码
// ipv4地址正则 iPv4:(1~255).(0~255).(0~255).(0~255)的格式 var ipP = /^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$/; //输出 true 例如:172.16.0.0, 127.0.0.0 console.log(ipP.test("115.28.47.26")); 复制代码
// ipv6地址正则 var ipP = /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i; //输出 true 例如:2031:0000:130f:0000:0000:09c0:876a:130b console.log(ipP.test("2031:0000:130f:0000:0000:09c0:876a:130b")); 复制代码
//16进制颜色正则 var colorP = /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/; //输出 true 例如:#f00, #F90, #00, #fe9de8 console.log(colorP.test("#fe9de8")); 复制代码
//中国邮政编码正则 var colorP = /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/; //输出 true 例如:734500, 100101 console.log(colorP.test("734500")); 复制代码
//QQ号码正则 var qqP = /^[1-9][0-9]{4,10}$/; //输出 true 例如:903013545, 9020304 console.log(qqP.test("12345")); 复制代码
//6至20位,以字母开头,字母,数字,减号,下划线 var weCP = /^[a-zA-Z][-_a-zA-Z0-9]{5,19}$/; //输出 true 例如:github666, kd_-666 console.log(weCP.test("wexin123_-")); 复制代码
/** * 常规车牌号(仅容许以汉字开头,后面可录入六个字符,由大写英文字母和阿拉伯数字组成。如:粤B12345) * 最后一个为汉字的车牌(最后一个字符为汉字,汉字包括挂、学、警、港、澳。如:粤Z1234港) * 新军车牌(以两位为大写英文字母开头,后面以5位阿拉伯数字组成。如:BA12345。) * 绿色车牌号(新能源车专用车牌)(2017年新车牌类型,仅容许以汉字开头,后面可录入七个字符,由大写英文字母和阿拉伯数字组成。如:粤B123456) */ //车牌号正则 var reg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/; var reg2 =/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{6}$/; //输出 true console.log(reg.test("粤B39006")); 复制代码
// 港澳通行证正则 var reg = /^[CW]\d{8}$/; // 输出 true console.log(reg.test("C00000000")); 复制代码
类型 | 说明 | 备注 |
---|---|---|
开头是大写的英文C 或者W |
C表示电子版的,也就是电子卡。W表示办的本子 | |
后面是8位数字 |
参考资料oop
// 迅雷连接正则 var linkP = /^thunder:\/\/[a-zA-Z0-9]+=$/; // 输出 true 例如: thunder://QUEsICdtYWduZXQ6P3h0PXVybjpidGloOjBCQTE0RTUxRkUwNjU1RjE0Qzc4NjE4RjY4NDY0QjZFNTEyNjcyOUMnWlo= console.log(linkP.test("thunder://QUEsICdtYWduZXQ6P3h0PXVybjpidGloOjBCQTE0RTUxRkUwNjU1RjE0Qzc4NjE4RjY4NDY0QjZFNTEyNjcyOUMnWlo=")) 复制代码
// ed2k连接(宽松匹配)正则 var linkP = /^ed2k:\/\/|file|.+|\/$/; // 输出 true 例如: ed2k://|file|%E5%AF%84%E7%94%9F%E8%99%AB.PARASITE.2019.HD-1080p.X264.AAC-UUMp4(ED2000.COM).mp4|2501554832|C0B93E0879C6071CBED732C20CE577A3|h=5HTKZPQFYRKORN52I3M7GQ4QQCIHFIBV|/ console.log(linkP.test("ed2k://|file|%E5%AF%84%E7%94%9F%E8%99%AB.PARASITE.2019.HD-1080p.X264.AAC-UUMp4(ED2000.COM).mp4|2501554832|C0B93E0879C6071CBED732C20CE577A3|h=5HTKZPQFYRKORN52I3M7GQ4QQCIHFIBV|/")) 复制代码
// 磁力连接(宽松匹配)正则 var linkP = /^magnet:\?xt=urn:btih:[0-9a-fA-F]{40,}.*$/; // 输出 true 例如: magnet:?xt=urn:btih:40A89A6F4FB1498A98087109D012A9A851FBE0FC console.log(linkP.test("magnet:?xt=urn:btih:40A89A6F4FB1498A98087109D012A9A851FBE0FC")) 复制代码
// 子网掩码正则 var linkP = /^(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/; // 输出 true 例如: 255.255.255.0, 255.224.0.0 console.log(linkP.test("255.255.255.0")) 复制代码