|
@@ -38,6 +38,53 @@ const password = [
|
|
|
trigger: "change",
|
|
|
},
|
|
|
];
|
|
|
+const strictPassword = [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
+ if (!value) {
|
|
|
+ return callback(new Error(`请输入密码`));
|
|
|
+ }
|
|
|
+ // 禁止使用相同的数字或字符作为密码
|
|
|
+ const reg2 = /^[a-zA-Z0-9].+$/;
|
|
|
+ const vals = new Set(value.split(""));
|
|
|
+ if (reg2.test(value) && vals.size === 1) {
|
|
|
+ return callback(new Error(`禁止使用相同的数字或字符作为密码`));
|
|
|
+ }
|
|
|
+ // 禁止使用连续升序或降序的数字或字母作为密码
|
|
|
+ const valCharCodes = value.split("").map((item) => item.charCodeAt());
|
|
|
+ let intervals = [];
|
|
|
+ for (let i = 0; i < valCharCodes.length; i++) {
|
|
|
+ const element = valCharCodes[i];
|
|
|
+ if (i === 0) continue;
|
|
|
+ intervals.push(element - valCharCodes[i - 1]);
|
|
|
+ }
|
|
|
+ const interVals = Array.from(new Set(intervals));
|
|
|
+ if (
|
|
|
+ reg2.test(value) &&
|
|
|
+ interVals.length === 1 &&
|
|
|
+ Math.abs(interVals[0]) === 1
|
|
|
+ ) {
|
|
|
+ return callback(
|
|
|
+ new Error(`禁止使用连续升序或降序的数字或字母作为密码`)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ // 密码应至少包含数字、大小写字母及特殊宇符中的两种;
|
|
|
+ const reg1 =
|
|
|
+ /^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)(?![!#$%^&*]+$)[\da-zA-Z!#$%^&*]{8,20}$/g;
|
|
|
+ if (!reg1.test(value)) {
|
|
|
+ return callback(
|
|
|
+ new Error(
|
|
|
+ `密码应至少包含数字、大小写字母及特殊宇符中的两种,长度8-20位;`
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ return callback();
|
|
|
+ },
|
|
|
+ trigger: "change",
|
|
|
+ },
|
|
|
+];
|
|
|
|
|
|
const phone = [
|
|
|
{
|
|
@@ -86,6 +133,7 @@ export {
|
|
|
commonCode,
|
|
|
email,
|
|
|
password,
|
|
|
+ strictPassword,
|
|
|
phone,
|
|
|
smscode,
|
|
|
numberValidator,
|