工作实战中用到的正则大总结

568 阅读5分钟

这是我参与 8 月更文挑战的第 17 天,活动详情查看: 8月更文挑战

前面了解完正则的理论知识点,现在总结一下工作实战中常用到的正则表达式。大家如果觉得还算有用,就请点个赞呦. o( ̄︶ ̄)o

密码强度

//密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
var pPattern = /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/;
//输出 true 例如:Lianpp11#
console.log(pPattern.test("Lianpp11#"));

// 弱密码(长度是6位以上就算字母、数字、特殊字符三项都包括,强度也是弱的)
var pPattern1 = /(?=.{6,}).*$/;
// 输出 false
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])(?=.*[!@#$%^&*? ]).*$/;
// 输出 true
console.log(pPattern3.test('Aa123##asd'))

用户名

4到16位(字母,数字,下划线,减号)

var uPattern = /^[a-zA-Z0-9_-]{4,16}$/; 
console.log(uPattern.test("lian_pp"));//输出 true

中文正则

//包含中文正则
var cnPattern = /[\u4E00-\u9FA5]/;
console.log(cnPattern.test("小兔子"));//输出 true
console.log(cnPattern.test("小兔子ss"));//输出 true

// 纯中文/汉正则
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])+$/;
console.log(numP.test("正则")); //true
console.log(numP.test("aa正则")); //false

手机号

手机号验证

// 手机号(mobile phone)中国(宽松), 只要是13,14,15,16,17,18,19开头即可"
// 11 位;第一位是数字 1; 第二位是数字 3-9 中的任意一位
var mPattern = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/;
//输出 true 例如:008618311006933, +8617888829981, 19119255642
console.log(mPattern.test("19119255642"));

// 中国手机号(严谨), 根据工信部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"));


// 中国手机号(最宽松), 只要是1开头即可, 如果你的手机号是用来接收短信, 优先建议选择这一条
var numP1 = /^(?:(?:\+|00)86)?1\d{10}$/;
//输出 true 例如:008618311006933, +8617888829981, 19119255642
console.log(numP1.test("19119255642"));

手机号3-4-4分割

let mobile = '18379836654' 
let mobileReg = /(?=(\d{4})+$)/g 

console.log(mobile.replace(mobileReg, '-')) // 183-7983-6654

国内座机号

类型说明
区号区号以0开头,3位或4位
号码号码由7位或8位数字组成
机号分机号码由1-6位数字组成
区号与号码之间可以无连接符,也可以“-”连接
分机号可有可无
// 座机号正则(可以不需要区号)
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"));

邮箱验证

//Email正则
var ePattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
console.log(ePattern.test("815682884@qq.com"));//输出 true

//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"));

身份证号正则

//身份证号(18位)正则
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]$/;
console.log(cP.test("11010519880605371X"));//输出 true

// 一代身份证号(15位数字)正则
var numP = /^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$/;
console.log(numP.test("622001790131123")); // true

// 二代身份证号(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)$/;
console.log(nump.test("62222319991205131x")); //true

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

url正则

var urlP= /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/;
console.log(urlP.test("http://maomin.com"));//输出 true

数字正则

// 是否小数正则 
var numP = /^\d*\.\d+$/; // 输出true 例如:0.0,0.09 
console.log(numP.test("0.09"));

//正整数正则
var posPattern = /^\d+$/;
//负整数正则
var negPattern = /^-\d+$/;
//整数正则
var intPattern = /^-?\d+$/;
console.log(posPattern.test("42"));//输出 true
console.log(negPattern.test("-42"));//输出 true
console.log(intPattern.test("-42"));//输出 true

//正数正则,可以是整数也可以是浮点数
var posPattern = /^\d*\.?\d+$/;
//负数正则
var negPattern = /^-\d*\.?\d+$/;
//数字正则
var numPattern = /^-?\d*\.?\d+$/;
console.log(posPattern.test("42.2")); // true
console.log(negPattern.test("-42.2")); // true
console.log(numPattern.test("-42.2"));//true

日期正则

//日期正则,简单判定,未做月份及日期的判定
var dP1 = /^\d{4}(\-)\d{1,2}\1\d{1,2}$/;
console.log(dP1.test("2017-05-11"));//输出 true
console.log(dP1.test("2017-15-11"));//输出 true
//日期正则,复杂判定
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)$/;
console.log(dP2.test("2017-02-11"));//输出 true
console.log(dP2.test("2017-15-11"));//输出 false
console.log(dP2.test("2017-02-29"));//输出 false

车牌号正则

var cPattern = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/;
console.log(cPattern.test("鲁B66666"));//输出 true

/**
  * 常规车牌号(仅允许以汉字开头,后面可录入六个字符,由大写英文字母和阿拉伯数字组成。如:粤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"));

港澳通行证正则

// 港澳通行证正则
//开头是大写的英文`C`或者`W`C表示电子版的,也就是电子卡。W表示办的本子
//后面是8位数字
var reg = /^[CW]\d{8}$/;
// 输出 true
console.log(reg.test("C00000000"));

QQ号码正则

//QQ号正则,5至11位
var qqPattern = /^[1-9][0-9]{4,10}$/;
console.log(qqPattern.test("815682884"));//输出 true

微信号正则

//微信号正则,6至20位,以字母开头,字母,数字,减号,下划线
var wxPattern = /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/;
console.log(wxPattern.test("maomin9761"));//输出 true

IP地址正则

var ipP = /^(?:(?: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]?)$/;
console.log(ipP.test("115.28.47.26")); //true

// 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"));


十六进制颜色正则

var cPattern = /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/;
console.log(cPattern.test("#f8f8f8"));//输出 true