前端正则表达式,非常齐全

说明
1.以下的验证规则是在公司项目中总结出来的,有的规则可能不适合您需要自行修改规则。
2.这些规则是自己和同事以前写的,可能不是最新,欢迎提出。

常用类

用户名

//用户名正则,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字节,允许字母数字下划线组合

// 帐号是否合法(字母开头,允许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

//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
复制代码
  • 规则说明:

    国内手机号码为11位数字,前两位只能为: 13 \ 14 \ 15 \ 17 \ 18

  • 三大运营商号段分配情况

号段 可选值
中国移动
13x 134X(0-8)、135、136、137、138、139
14x 147(数据卡)
15x 150、151、152、157X(0-7\9)(TD)、158、159
17x 182 、183、184、187(3G\4G)、188(3G)
18x 分机号可有可无
19x 98(2017-08-16 说明见附录一)
中国联通
13x 130、131、132
14x 145(数据卡)
15x 155、156
17x 176(4G)
18x 185(3G)、186(3G)
16x 166(2017-08-16 说明见附录一)
中国电信
13x 133、(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位数字)

// 一代身份证号(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

// 二代身份证号(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位数字)

// 身份证号, 支持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"));
复制代码

参考资料

说明
一代身份证自2013年1月1日起停止使用
全国公民身份证号码查询服务中心

日期

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"));
复制代码

ip-v4

// 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"));
复制代码

ip-v6

// 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进制颜色

//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号码

//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位数字

参考资料

中华人民共和国往来港澳通行证

链接

迅雷链接

// 迅雷链接正则
var linkP = /^thunder:\/\/[a-zA-Z0-9]+=$/;
// 输出 true 例如: thunder://QUEsICdtYWduZXQ6P3h0PXVybjpidGloOjBCQTE0RTUxRkUwNjU1RjE0Qzc4NjE4RjY4NDY0QjZFNTEyNjcyOUMnWlo=
console.log(linkP.test("thunder://QUEsICdtYWduZXQ6P3h0PXVybjpidGloOjBCQTE0RTUxRkUwNjU1RjE0Qzc4NjE4RjY4NDY0QjZFNTEyNjcyOUMnWlo="))
复制代码

ed2k链接(宽松匹配)

// 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"))
复制代码

本文将会陆续收集前端表单中的正则验证...

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342