项目中经常用到的正则以及脱敏方法

日常开发时,经常会用到需要正则校验的规则或者一些脱敏方法,所以自己整理了一份,方便以后查阅。

前端字符串转义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const escapeHtml = (str) => {
let arr = [
'le': '<=',
'lt': '>=',
'gt': '>',
'ge': '<',
'amp': '&',
'quot': '"',
'lsquo': '‘',
'rsquo': '’',
'ldquo': '“',
'rdquo': '”',
'middot': '·',
'nbsp': ' ',
'iexcl': '¡',
'cent': '¢',
'pound': '£',
'mdash': '—',
'hellip': '…',
'infinity': '∞'
]
if (str && str.replace) {
return str.replace(/&(le|lt|gt|ge|amp|quot|lsquo|rsquo|ldquo|rdquo|middot|nbsp|iexcl|cent|pound|mdash|hellip|infinity);/ig, (all, t) => {
return arr[t]
})
} else {
return str
}
}

常用正则校验

中文

1
2
3
4
5
6
7
8
9
// 只能输入中文——长度不限
let reg = /^[\u4e00-\u9fa5]+$/
reg.test("就这") // true
reg.test("jiuZhe") // false

// 只能输入中文——限制长度2-6
let reg = /^[\u4e00-\u9fa5]{2,6}$/
reg.test("就这") // true
reg.test("就这啊啊啊啊啊啊") // false

英文

1
2
3
4
5
6
7
8
9
// 只能输入英文——长度不限
let reg = /^[a-z]+$/i
reg.test("asdf") // true
reg.test("asd123") // false

// 只能输入英文——限制长度2-6
let reg = /^[a-z]{2,6}$/i
reg.test("asdf") // true
reg.test("niZaiGanMa") // false

数字

1
2
3
4
5
6
7
8
9
// 只能输入数字——长度不限
let reg = /^\d+$/
reg.test("1234") // true
reg.test("asd123") // false

// 只能输入数字——限制长度2-6
let reg = /^\d{2,6}$/
reg.test("123") // true
reg.test("12345678") // false

类型校验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// 英文、数字-----常用于合格证编号、车架号等
/^[a-z0-9]+$/i

// 英文、数字、下划线-----8-16位密码
/^\w{8,16}$/

// 英文、数字、下划线-----常用于用户名、密码等
/^[a-z0-9_]+$/

// 英文、数字、下划线、横杠-----常用于用户名、密码等
/^[a-z0-9_-]+$/

// 中、英文、数字、下划线----常用于地址校验
/^[\u4E00-\u9FA5A-Za-z0-9_]+$/

// 身份证号码
/^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/

// 统一社会信用代码
/(^[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$)|(^[A-Za-z0-9]\w{14}$)/;

/**
* 手机号-----包含号段的校验
*
* 手机号码起始1,第二位是3456789中的任意一个,第三位有的是0-9全段,有的只是部分,如下:
* 13和18开头的手机号是全段
* 13开头的手机号是全段:13 [0123456789] 比如130,131,132…139
* 18开头的手机号是全段:18[0123456789] 比如180,181,182…189
* 15和19开头的手机号后面除4外都有,无154和194
* 15 [012356789] 比如150,151,152,153,155…159
* 19 [012356789] 比如190,191,192,193,195…159
* 17开头的手机号后面除9外都有
* 17 [01235678] 比如170,171,172,173…178
* 14开头的手机号除2,3外都有,无142和143
* 14[01456879] 比如140,141,144,145…149
* 16开头的手机号后面只有2567
* 16[2567] 比如:162,165,166,167
*/
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/

// 邮箱
/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/

// 邮编
/^[1-9]\d{5}(?!\d)$/

脱敏方法

1
2
3
4
5
6
7
8
9
10
// 手机号脱敏
const phoneDesensitization = (phone) => {
return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
}

// 身份证号脱敏
const idCardDesensitization = (idCard) => {
return idCard.replace(/(\d{4})\d{10}(\w{4})/, '$1********$2')
}