Kaynağa Gözat

重新设置密码加校验

Shan9312 1 yıl önce
ebeveyn
işleme
1bf20ed145
1 değiştirilmiş dosya ile 53 ekleme ve 5 silme
  1. 53 5
      src/views/changpwd/changpwd/index.vue

+ 53 - 5
src/views/changpwd/changpwd/index.vue

@@ -16,6 +16,7 @@
       <el-form-item label="确认密码:" prop="password1">
         <el-input v-model="temp.password1" type="password" auto-complete="off" />
       </el-form-item>
+      <p class='password'>密码设置规则:大小写字母+数字+特殊符号;不少于8位;不得用连号的数字或者字母;</p>
       <el-form-item>
         <el-button type="primary" @click.native.prevent="toAmend">确认修改</el-button>
       </el-form-item>
@@ -30,8 +31,8 @@ export default {
     var oldPass = (rule, value, callback) => {
       if (!value) {
         callback(new Error('请输入旧密码'))
-      } else if (value.toString().length < 6 || value.toString().length > 18) {
-        callback(new Error('密码长度为6-18位'))
+      } else if (value.toString().length < 8 || value.toString().length > 18) {
+        callback(new Error('密码长度为8-18位'))
       } else {
         callback()
       }
@@ -40,12 +41,54 @@ export default {
       console.log(value)
       if (!value) {
         callback(new Error('请输入新密码'))
-      } else if (value.toString().length < 6 || value.toString().length > 18) {
-        callback(new Error('密码长度为6-18位'))
+      } else if (value.toString().length < 8 || value.toString().length > 18) {
+        callback(new Error('密码长度为8-18位'))
       } else {
         callback()
       }
     }
+// 新密码的规则
+const validatePassword=(rule, password, callback)=> {
+      const lengthRequirement = /.{8,}/;// 至少8个字符
+      const upperCaseRequirement = /[A-Z]/;// 至少一个大写字母
+      const lowerCaseRequirement = /[a-z]/;// 至少一个小写字母
+      const digitRequirement = /\d/;// 至少一个数字
+      const specialCharRequirement = /[!@#$%^&*(),.?":{}|<>]/;// 至少一个特殊符号
+
+      const noSequentialChars = /^(?!.*(?:012|123|234|345|456|567|678|789|890|abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz|yz|za)).*$/; // 不含连号的数字或字母
+      const noCommonPatterns = /^(?!.*(?:1qaz|2wsx|3edc|4rfv|5tgb|6yhn|7ujm|8ik,|9ol.|0p;\/)).*$/; // 不含常见模式
+
+      if (!lengthRequirement.test(password)) {
+          callback(new Error('密码长度不能少于8位'))
+          return
+      }
+      if (!upperCaseRequirement.test(password)) {
+          callback(new Error('密码必须包含大写字母'))
+          return
+      }
+      if (!lowerCaseRequirement.test(password)) {
+          callback(new Error('密码必须包含小写字母'))
+          return
+      }
+      if (!digitRequirement.test(password)) {
+          callback(new Error('密码必须包含数字'))
+          return
+      }
+      if (!specialCharRequirement.test(password)) {
+          callback(new Error('密码必须包含特殊符号'))
+          return
+      }
+      if (!noSequentialChars.test(password)) {
+          callback(new Error('密码不能包含连号的数字或字母'))
+          return
+      }
+      if (!noCommonPatterns.test(password)) {
+          callback(new Error('密码不能包含常见模式(如1qaz2wsx等)'))
+          return
+      }
+       callback()
+    }
+
     var validatePass2 = (rule, value, callback) => {
       if (value === '') {
         callback(new Error('请再次输入密码'))
@@ -70,7 +113,7 @@ export default {
           { required: true, validator: oldPass, trigger: 'blur' }
         ],
         password: [
-          { required: true, validator: validatePass, trigger: 'blur' }
+          { required: true, validator: validatePassword, trigger: 'blur' }
         ],
         password1: [
           { required: true, validator: validatePass2, trigger: 'blur' }
@@ -162,4 +205,9 @@ export default {
     margin: 20px 0 0;
   }
 }
+.password{
+  font-size: 14px;
+  text-align: center;
+  color:#F56C6C;
+}
 </style>