0%

正则表达式

🏀正则表达式

  • 主要功能:模式匹配,文本检索与替换
  • 表示:
  1. 可以用RegExp对象表示,用RegExp()构造函数来创建RegExp对象
  2. 正则表达式直接量:/…/之间的字符
  • 组成
  1. 普通字符: 字母[a-zA-Z]、数字[0-9]、下划线[-]、汉字,标点符号
  2. 元字符(特殊字符):

    语法

    注意:
    在字符集合中[ ],^ 表示匹配未包含的任意字符
    在正则表达式中/ /,^表示定位符,匹配输入字符串开始的位置

    常用的标准字符说明
标准字符 含义
\d 匹配0-9中的任意一个数字,等效于[0-9]
\D 匹配非数字字符,等效于[^0-9]
\w 匹配任意一个字母、数字或下划线,等效于[A-Za-z0-9_]
\W 与任何非字母、数字或下划线字符匹配,等效于[^A-Za-z0-9_]
\s 匹配任何非空白字符,等效于[^\f\n\r\t\v]
\n 匹配换行符
\r 匹配一个回车符
\t 匹配制表符
\f 匹配换页符
\v 匹配垂直制表符
常用的特殊字符说明
特殊字符 含义
\ 转义字符,将下一个字符标记为一个特殊字符
^ 匹配字符串开始的位置
$ 匹配字符串结尾的位置
* 零次或多次匹配前面的字符或子表达式
+ 一次或多次匹配前面的字符或子表达式
? 零次或一次匹配前面的字符或子表达式
. “点” 匹配除“\r\n”之外的任何单个字符
|
[ ] 字符集合
( ) 分组,要匹配圆括号字符,请使用 “(” ?或 “)”
常用的限定字符说明
限定字符 含义
* 零次或多次匹配前面的字符或子表达式
+ 一次或多次匹配前面的字符或子表达式
? 零次或一次匹配前面的字符或子表达式
{n} n是一个非负整数,匹配确定的n次
{n,} n是非负整数,至少匹配n次
{n,m} n和m是非负整数,其中n<=m;匹配至少n次,至多m次
常用的定位字符说明
定位字符 含义
^ 匹配字符串开始的位置,表示开始
$ 匹配字符串结尾的位置,表示结尾
\b 匹配一个单词边界
举个栗子

1、在表单中 存在电子邮箱的校验:

1
2
3
4
5
const emailReg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/g;
if (!emailReg.test(email)) {
this.showToast('请输入正确的邮箱地址!');
return false;
}

2、身份证合法校验

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// 身份证合法校验
export const identityCodeValid = (code, sex = '') => {
let ycode = code;
let pass = true;
let result = {
tip: '',
code: '11'
};
const city = {
11: '北京',
12: '天津',
13: '河北',
14: '山西',
15: '内蒙古',
21: '辽宁',
22: '吉林',
23: '黑龙江 ',
31: '上海',
32: '江苏',
33: '浙江',
34: '安徽',
35: '福建',
36: '江西',
37: '山东',
41: '河南',
42: '湖北 ',
43: '湖南',
44: '广东',
45: '广西',
46: '海南',
50: '重庆',
51: '四川',
52: '贵州',
53: '云南',
54: '西藏 ',
61: '陕西',
62: '甘肃',
63: '青海',
64: '宁夏',
65: '新疆',
71: '台湾',
81: '香港',
82: '澳门',
91: '国外 '
};

if (
!code ||
!/^(^[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])$)$/.test(
code
)
) {
result.tip = '身份证号格式错误';
result.code = '01';
pass = false;
} else if (!city[code.substr(0, 2)]) {
result.tip = '身份证号地址编码错误';
result.code = '02';
pass = false;
} else {
// 18位身份证需要验证最后一位校验位
if (code.length === 18) {
code = code.split('');
// ∑(ai×Wi)(mod 11)
// 加权因子
const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
// 校验位
const parity = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
let sum = 0;
let ai = 0;
let wi = 0;
for (let i = 0; i < 17; i++) {
ai = parseInt(code[i], 10);
wi = factor[i];
sum += ai * wi;
}
let last = parity[sum % 11];
if (last !== code[17]) {
result.tip = '身份证号校验位错误';
result.code = '03';
pass = false;
}
}
}
// 判断性别
if (pass && (sex === 0 || sex === 1)) {
let vsex;
if (ycode.length === 15) vsex = ycode.substr(14, 1);
else if (ycode.length === 18) vsex = ycode.substr(16, 1);
if (vsex || vsex === 0) {
if (parseInt(vsex) % 2 !== sex) {
result.tip = '身份证号性别不符';
result.code = '04';
pass = false;
};
}
}
return result;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 身份证强校验
identityCodeVerifier(idCode, role = '') {
idCode = idCode.replace(/\s+/g, '');
if (!idCode) {
this.showToast(`请输入${role}身份证!`);
return false;
}
const result = identityCodeValid(idCode);
if (result.code !== '11') {
this.showToast(result.tip);
return false;
}
return true;
}

最后

正则表达式 如果玩的非常6 还是很方便的,自己用的还是不够熟练,很多东西就是 知道会用 但就是缺乏联系,而没有做到熟能生巧的地步。

加油加油,虽然走的慢,至少在前进!