分享一些工作中遇到的正则

225 阅读1分钟

(持续更新--2022/04/15)

tips

本文主要使用pattern.test方法校验

18位身份证号码

译解正则
6 位地区编码[1-9]\d{5}
4 位年份[1-9]\d{3}
2 位月份0[1-9]|1[0-2]
2 位日期0[1-9]|[1-2]\d|3[0-1]
4 位校验码\d{3}[\dXx]
const pattern = /^[1-9]\d{5}[1-9]\d{3}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])(\d{3}[\dXx])$/

密码校验-至少包括 2 种字符

密码长度 6-12 位,由数字、小写字符和大写字母组成,但必须至少包括 2 种字符。

译解正则
数字\d
小写字母a-z
大写字母A-Z
不能全部数字?!^\d{6,12}$
不能全部小写字母?!^[a-z]{6,12}$
不能全部大写字母?!^[A-Z]{6,12}$
6-12 位,由数字、小写字符和大写字母组成^[\da-zA-Z]{6,12}$
const pattern = /(?!^\d{6,12}$)(?!^[a-z]{6,12}$)(?!^[A-Z]{6,12}$)^[\da-zA-Z]{6,12}$/

密码校验-全部包括

密码长度 6-12 位,由数字、小写字符和大写字母组成,但全部包括 3 种字符。

译解正则
含有数字(?=.*\d)
含有小写字母(?=.*[a-z])
含有大写字母(?=.*[A-Z])
6-12 位,由数字、小写字符和大写字母组成^[\da-zA-Z]{6,12}$
const pattern = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])^[\da-zA-Z]{6,12}$/

去掉头尾空格(trim方法模拟)

const pattern = /^\s+|\s+$/g
' test '.replace(pattern,'')
//'test'

手机号

译解正则
必须数字 1 开头^1
第二位必须34567[34578]
后9位任意数字结尾\d{9}$
const pattern = /^1[34578]\d{9}$/

16进制颜色

译解正则
#开头^#
情况一:6位字母或数字结尾[\da-zA-Z]$
情况二:3位字母或数字结尾[\da-zA-Z]$
const pattern = /^#([\da-zA-Z]{6}|[\da-zA-Z]{3})$/

输入框输入字符串,根据空格逗号,将有意义的字符串才分为数组

一般输入单号,向后台传输数组.

const str = 'id1111 id2222 id3333,  ,id44444,,,,,id5555'
const pattern = /[\s,,]+/g
console.log(str.split(pattern))
//(5) ['id1111', 'id2222', 'id3333', 'id44444', 'id5555']

HTML标签

const str = 'title<title>Document</title>id<a/></title>title'
const pattern = /<(.*)>.*?<\/\1>|<.+?\/>/g
console.log(str.match(pattern));
// (2) ['<title>Document</title>', '<a/>']

含有中文

const pattern = /[\u4E00-\u9FA5]/

截取正则表达式的flags(克隆正则)

const patten = /\w*$/;
const reg = new RegExp("a", "imgsy");
console.log(reg);
console.log(patten.exec(reg));
const regClone = new RegExp(reg, patten.exec(reg)); //克隆正则
console.log(regClone);