zmdms-utils 0.0.82 → 0.0.83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/validate.js +168 -1
- package/package.json +1 -1
- package/src/validate.ts +198 -0
package/dist/es/validate.js
CHANGED
|
@@ -43,5 +43,172 @@ var isChineseValidate = {
|
|
|
43
43
|
regex: /[\u4e00-\u9fa5]/,
|
|
44
44
|
message: "请输入中文!",
|
|
45
45
|
};
|
|
46
|
+
var alphabet1 = [
|
|
47
|
+
"abcdefghijklmnopqrstuvwxyz",
|
|
48
|
+
"ABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
|
49
|
+
"0123456789",
|
|
50
|
+
];
|
|
51
|
+
var alphabet2 = ["qwertyuiop", "asdfghjkl", "zxcvbnm"];
|
|
52
|
+
var alphabet3 = ["qaz", "wsx", "edc", "rfv", "tgb", "yhn", "ujm"];
|
|
53
|
+
function isConsecutiveChars(char1, char2, alphabetArr) {
|
|
54
|
+
// const lowerCaseAlphabet = 'abcdefghijklmnopqrstuvwxyz'; // 小写字母
|
|
55
|
+
// const upperCaseAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; // 大写字母
|
|
56
|
+
// const numeric = '0123456789'; // 数字
|
|
57
|
+
// 找到包含两个字符的字符集
|
|
58
|
+
var alphabet = alphabetArr.find(function (alph) { return alph.includes(char1) && alph.includes(char2); });
|
|
59
|
+
if (!alphabet) {
|
|
60
|
+
return false; // 如果两个字符不在同一字符集中,那么它们不可能连续
|
|
61
|
+
}
|
|
62
|
+
var index1 = alphabet.indexOf(char1);
|
|
63
|
+
var index2 = alphabet.indexOf(char2);
|
|
64
|
+
// return Math.abs(index1 - index2) === 1; // 如果两个字符在字符集中的位置相邻,那么它们是连续的
|
|
65
|
+
return index1 - index2;
|
|
66
|
+
}
|
|
67
|
+
function validatePassword(password, username) {
|
|
68
|
+
// 用正则表达式检查密码基本规则
|
|
69
|
+
var regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{8,}$/;
|
|
70
|
+
if (!regex.test(password)) {
|
|
71
|
+
return {
|
|
72
|
+
result: false,
|
|
73
|
+
message: "密码中必须包含大小写字母、数字、特殊字符,且长度必须大于8个字符!",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// 检查密码是否与用户名相同
|
|
77
|
+
if (password === username) {
|
|
78
|
+
return {
|
|
79
|
+
result: false,
|
|
80
|
+
message: "密码与用户名相同!",
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// 检查密码中是否有相同且连续的字符 超过三次
|
|
84
|
+
var count1 = 0;
|
|
85
|
+
for (var i = 0; i < password.length - 1; i++) {
|
|
86
|
+
if (password[i] === password[i + 1]) {
|
|
87
|
+
count1++;
|
|
88
|
+
if (count1 >= 2) {
|
|
89
|
+
return {
|
|
90
|
+
result: false,
|
|
91
|
+
message: "密码中有相同且连续超过三次的字符!",
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
count1 = 0;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// 检查密码中是否有连续的字母或数字 连续超过三次
|
|
100
|
+
var count = 0;
|
|
101
|
+
var startChart = 0;
|
|
102
|
+
var currentConsecutiveCount = 0; // 记录上次是递增还是递减
|
|
103
|
+
// 第一次循环 找出 连续字母 数字
|
|
104
|
+
for (var i = 0; i < password.length - 1; i++) {
|
|
105
|
+
var consecutiveCount = isConsecutiveChars(password[i], password[i + 1], alphabet1);
|
|
106
|
+
// 是递增 还是 递减
|
|
107
|
+
if (consecutiveCount === 1 || consecutiveCount === -1) {
|
|
108
|
+
if (currentConsecutiveCount === 0) {
|
|
109
|
+
currentConsecutiveCount = consecutiveCount;
|
|
110
|
+
}
|
|
111
|
+
if (count === 0) {
|
|
112
|
+
startChart = i;
|
|
113
|
+
}
|
|
114
|
+
// 如果记录到上次跟本次的连续规则相同
|
|
115
|
+
if (currentConsecutiveCount === consecutiveCount) {
|
|
116
|
+
count++;
|
|
117
|
+
if (count >= 2) {
|
|
118
|
+
// 密码中不应含有连续的字母或数字
|
|
119
|
+
return {
|
|
120
|
+
result: false,
|
|
121
|
+
message: "\u4ECE\u7B2C".concat(startChart + 1, "\u4E2A\u5B57\u7B26\u5F00\u59CB\uFF0C\u6709\u8FDE\u7EED").concat(currentConsecutiveCount === 1 ? "递减" : "递增", "\u8D85\u8FC7\u4E09\u4F4D\u7684\u5B57\u6BCD\u6216\u6570\u5B57!"),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
// 需要重置规则
|
|
127
|
+
count = 0;
|
|
128
|
+
startChart = 0;
|
|
129
|
+
}
|
|
130
|
+
currentConsecutiveCount = consecutiveCount;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
count = 0;
|
|
134
|
+
startChart = 0;
|
|
135
|
+
currentConsecutiveCount = 0;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// 第二次循环 找出键盘连续横排字母
|
|
139
|
+
for (var i = 0; i < password.length - 1; i++) {
|
|
140
|
+
var consecutiveCount = isConsecutiveChars(password[i], password[i + 1], alphabet2);
|
|
141
|
+
// 是递增 还是 递减
|
|
142
|
+
if (consecutiveCount === 1 || consecutiveCount === -1) {
|
|
143
|
+
if (currentConsecutiveCount === 0) {
|
|
144
|
+
currentConsecutiveCount = consecutiveCount;
|
|
145
|
+
}
|
|
146
|
+
if (count === 0) {
|
|
147
|
+
startChart = i;
|
|
148
|
+
}
|
|
149
|
+
// 如果记录到上次跟本次的连续规则相同
|
|
150
|
+
if (currentConsecutiveCount === consecutiveCount) {
|
|
151
|
+
count++;
|
|
152
|
+
if (count >= 2) {
|
|
153
|
+
// 密码中不应含有连续的字母或数字
|
|
154
|
+
return {
|
|
155
|
+
result: false,
|
|
156
|
+
message: "\u4ECE\u7B2C".concat(startChart + 1, "\u4E2A\u5B57\u7B26\u5F00\u59CB\uFF0C\u6709\u6309\u952E\u76D8\u6A2A\u5411\u8FDE\u7EED").concat(currentConsecutiveCount === 1 ? "递减" : "递增", "\u8D85\u8FC7\u4E09\u4F4D\u7684\u5B57\u6BCD!"),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
// 需要重置规则
|
|
162
|
+
count = 0;
|
|
163
|
+
startChart = 0;
|
|
164
|
+
}
|
|
165
|
+
currentConsecutiveCount = consecutiveCount;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
count = 0;
|
|
169
|
+
startChart = 0;
|
|
170
|
+
currentConsecutiveCount = 0;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// 第三次循环 找出键盘连续竖排字母
|
|
174
|
+
for (var i = 0; i < password.length - 1; i++) {
|
|
175
|
+
var consecutiveCount = isConsecutiveChars(password[i], password[i + 1], alphabet3);
|
|
176
|
+
// 是递增 还是 递减
|
|
177
|
+
if (consecutiveCount === 1 || consecutiveCount === -1) {
|
|
178
|
+
if (currentConsecutiveCount === 0) {
|
|
179
|
+
currentConsecutiveCount = consecutiveCount;
|
|
180
|
+
}
|
|
181
|
+
if (count === 0) {
|
|
182
|
+
startChart = i;
|
|
183
|
+
}
|
|
184
|
+
// 如果记录到上次跟本次的连续规则相同
|
|
185
|
+
if (currentConsecutiveCount === consecutiveCount) {
|
|
186
|
+
count++;
|
|
187
|
+
if (count >= 2) {
|
|
188
|
+
// 密码中不应含有连续的字母或数字
|
|
189
|
+
return {
|
|
190
|
+
result: false,
|
|
191
|
+
message: "\u4ECE\u7B2C".concat(startChart + 1, "\u4E2A\u5B57\u7B26\u5F00\u59CB\uFF0C\u6709\u6309\u952E\u76D8\u7AD6\u5411\u8FDE\u7EED").concat(currentConsecutiveCount === 1 ? "递减" : "递增", "\u8D85\u8FC7\u4E09\u4F4D\u7684\u5B57\u6BCD\u6216\u6570\u5B57!"),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
// 需要重置规则
|
|
197
|
+
count = 0;
|
|
198
|
+
startChart = 0;
|
|
199
|
+
}
|
|
200
|
+
currentConsecutiveCount = consecutiveCount;
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
count = 0;
|
|
204
|
+
startChart = 0;
|
|
205
|
+
currentConsecutiveCount = 0;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// 如果通过了所有的检查,则返回true
|
|
209
|
+
return {
|
|
210
|
+
result: true,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
46
213
|
|
|
47
|
-
export { emailValidate, idCardValidate, isChineseValidate, morePhoneValidate, phoneValidate, strLenValidate };
|
|
214
|
+
export { emailValidate, idCardValidate, isChineseValidate, morePhoneValidate, phoneValidate, strLenValidate, validatePassword };
|
package/package.json
CHANGED
package/src/validate.ts
CHANGED
|
@@ -48,3 +48,201 @@ export const isChineseValidate = {
|
|
|
48
48
|
regex: /[\u4e00-\u9fa5]/,
|
|
49
49
|
message: "请输入中文!",
|
|
50
50
|
};
|
|
51
|
+
|
|
52
|
+
const alphabet1 = [
|
|
53
|
+
"abcdefghijklmnopqrstuvwxyz",
|
|
54
|
+
"ABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
|
55
|
+
"0123456789",
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
const alphabet2 = ["qwertyuiop", "asdfghjkl", "zxcvbnm"];
|
|
59
|
+
const alphabet3 = ["qaz", "wsx", "edc", "rfv", "tgb", "yhn", "ujm"];
|
|
60
|
+
|
|
61
|
+
function isConsecutiveChars(
|
|
62
|
+
char1: string,
|
|
63
|
+
char2: string,
|
|
64
|
+
alphabetArr: string[]
|
|
65
|
+
) {
|
|
66
|
+
// const lowerCaseAlphabet = 'abcdefghijklmnopqrstuvwxyz'; // 小写字母
|
|
67
|
+
// const upperCaseAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; // 大写字母
|
|
68
|
+
// const numeric = '0123456789'; // 数字
|
|
69
|
+
|
|
70
|
+
// 找到包含两个字符的字符集
|
|
71
|
+
const alphabet = alphabetArr.find(
|
|
72
|
+
(alph) => alph.includes(char1) && alph.includes(char2)
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
if (!alphabet) {
|
|
76
|
+
return false; // 如果两个字符不在同一字符集中,那么它们不可能连续
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const index1 = alphabet.indexOf(char1);
|
|
80
|
+
const index2 = alphabet.indexOf(char2);
|
|
81
|
+
|
|
82
|
+
// return Math.abs(index1 - index2) === 1; // 如果两个字符在字符集中的位置相邻,那么它们是连续的
|
|
83
|
+
return index1 - index2;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function validatePassword(password: string, username: string) {
|
|
87
|
+
// 用正则表达式检查密码基本规则
|
|
88
|
+
const regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{8,}$/;
|
|
89
|
+
if (!regex.test(password)) {
|
|
90
|
+
return {
|
|
91
|
+
result: false,
|
|
92
|
+
message:
|
|
93
|
+
"密码中必须包含大小写字母、数字、特殊字符,且长度必须大于8个字符!",
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// 检查密码是否与用户名相同
|
|
98
|
+
if (password === username) {
|
|
99
|
+
return {
|
|
100
|
+
result: false,
|
|
101
|
+
message: "密码与用户名相同!",
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// 检查密码中是否有相同且连续的字符 超过三次
|
|
106
|
+
let count1 = 0;
|
|
107
|
+
for (let i = 0; i < password.length - 1; i++) {
|
|
108
|
+
if (password[i] === password[i + 1]) {
|
|
109
|
+
count1++;
|
|
110
|
+
if (count1 >= 2) {
|
|
111
|
+
return {
|
|
112
|
+
result: false,
|
|
113
|
+
message: "密码中有相同且连续超过三次的字符!",
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
} else {
|
|
117
|
+
count1 = 0;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// 检查密码中是否有连续的字母或数字 连续超过三次
|
|
122
|
+
let count = 0;
|
|
123
|
+
let startChart = 0;
|
|
124
|
+
let currentConsecutiveCount = 0; // 记录上次是递增还是递减
|
|
125
|
+
|
|
126
|
+
// 第一次循环 找出 连续字母 数字
|
|
127
|
+
for (let i = 0; i < password.length - 1; i++) {
|
|
128
|
+
const consecutiveCount = isConsecutiveChars(
|
|
129
|
+
password[i],
|
|
130
|
+
password[i + 1],
|
|
131
|
+
alphabet1
|
|
132
|
+
);
|
|
133
|
+
// 是递增 还是 递减
|
|
134
|
+
if (consecutiveCount === 1 || consecutiveCount === -1) {
|
|
135
|
+
if (currentConsecutiveCount === 0) {
|
|
136
|
+
currentConsecutiveCount = consecutiveCount;
|
|
137
|
+
}
|
|
138
|
+
if (count === 0) {
|
|
139
|
+
startChart = i;
|
|
140
|
+
}
|
|
141
|
+
// 如果记录到上次跟本次的连续规则相同
|
|
142
|
+
if (currentConsecutiveCount === consecutiveCount) {
|
|
143
|
+
count++;
|
|
144
|
+
if (count >= 2) {
|
|
145
|
+
// 密码中不应含有连续的字母或数字
|
|
146
|
+
return {
|
|
147
|
+
result: false,
|
|
148
|
+
message: `从第${startChart + 1}个字符开始,有连续${
|
|
149
|
+
currentConsecutiveCount === 1 ? "递减" : "递增"
|
|
150
|
+
}超过三位的字母或数字!`,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
} else {
|
|
154
|
+
// 需要重置规则
|
|
155
|
+
count = 0;
|
|
156
|
+
startChart = 0;
|
|
157
|
+
}
|
|
158
|
+
currentConsecutiveCount = consecutiveCount;
|
|
159
|
+
} else {
|
|
160
|
+
count = 0;
|
|
161
|
+
startChart = 0;
|
|
162
|
+
currentConsecutiveCount = 0;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// 第二次循环 找出键盘连续横排字母
|
|
166
|
+
for (let i = 0; i < password.length - 1; i++) {
|
|
167
|
+
const consecutiveCount = isConsecutiveChars(
|
|
168
|
+
password[i],
|
|
169
|
+
password[i + 1],
|
|
170
|
+
alphabet2
|
|
171
|
+
);
|
|
172
|
+
// 是递增 还是 递减
|
|
173
|
+
if (consecutiveCount === 1 || consecutiveCount === -1) {
|
|
174
|
+
if (currentConsecutiveCount === 0) {
|
|
175
|
+
currentConsecutiveCount = consecutiveCount;
|
|
176
|
+
}
|
|
177
|
+
if (count === 0) {
|
|
178
|
+
startChart = i;
|
|
179
|
+
}
|
|
180
|
+
// 如果记录到上次跟本次的连续规则相同
|
|
181
|
+
if (currentConsecutiveCount === consecutiveCount) {
|
|
182
|
+
count++;
|
|
183
|
+
if (count >= 2) {
|
|
184
|
+
// 密码中不应含有连续的字母或数字
|
|
185
|
+
return {
|
|
186
|
+
result: false,
|
|
187
|
+
message: `从第${startChart + 1}个字符开始,有按键盘横向连续${
|
|
188
|
+
currentConsecutiveCount === 1 ? "递减" : "递增"
|
|
189
|
+
}超过三位的字母!`,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
} else {
|
|
193
|
+
// 需要重置规则
|
|
194
|
+
count = 0;
|
|
195
|
+
startChart = 0;
|
|
196
|
+
}
|
|
197
|
+
currentConsecutiveCount = consecutiveCount;
|
|
198
|
+
} else {
|
|
199
|
+
count = 0;
|
|
200
|
+
startChart = 0;
|
|
201
|
+
currentConsecutiveCount = 0;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// 第三次循环 找出键盘连续竖排字母
|
|
205
|
+
for (let i = 0; i < password.length - 1; i++) {
|
|
206
|
+
const consecutiveCount = isConsecutiveChars(
|
|
207
|
+
password[i],
|
|
208
|
+
password[i + 1],
|
|
209
|
+
alphabet3
|
|
210
|
+
);
|
|
211
|
+
// 是递增 还是 递减
|
|
212
|
+
if (consecutiveCount === 1 || consecutiveCount === -1) {
|
|
213
|
+
if (currentConsecutiveCount === 0) {
|
|
214
|
+
currentConsecutiveCount = consecutiveCount;
|
|
215
|
+
}
|
|
216
|
+
if (count === 0) {
|
|
217
|
+
startChart = i;
|
|
218
|
+
}
|
|
219
|
+
// 如果记录到上次跟本次的连续规则相同
|
|
220
|
+
if (currentConsecutiveCount === consecutiveCount) {
|
|
221
|
+
count++;
|
|
222
|
+
if (count >= 2) {
|
|
223
|
+
// 密码中不应含有连续的字母或数字
|
|
224
|
+
return {
|
|
225
|
+
result: false,
|
|
226
|
+
message: `从第${startChart + 1}个字符开始,有按键盘竖向连续${
|
|
227
|
+
currentConsecutiveCount === 1 ? "递减" : "递增"
|
|
228
|
+
}超过三位的字母或数字!`,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
} else {
|
|
232
|
+
// 需要重置规则
|
|
233
|
+
count = 0;
|
|
234
|
+
startChart = 0;
|
|
235
|
+
}
|
|
236
|
+
currentConsecutiveCount = consecutiveCount;
|
|
237
|
+
} else {
|
|
238
|
+
count = 0;
|
|
239
|
+
startChart = 0;
|
|
240
|
+
currentConsecutiveCount = 0;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// 如果通过了所有的检查,则返回true
|
|
245
|
+
return {
|
|
246
|
+
result: true,
|
|
247
|
+
};
|
|
248
|
+
}
|