正则:由8-20个字符组成,必须包含大小写字母,数字或标点符号(除空格)

发布时间 2023-12-20 15:28:14作者: IT小姐姐

 

<el-form-item label="设置密码" prop="pass">
    <el-input type="password" v-model="ruleForm.pass" autocomplete="off" placeholder="请输入密码" show-password></el-input>
</el-form-item>
<el-form-item label="确认密码" prop="checkPass">
    <el-input type="password" v-model="ruleForm.checkPass" autocomplete="off" placeholder="请再次确认密码"  show-password></el-input>
</el-form-item>
data(){
    var validatePass = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请输入密码'));
        } else {
          if (this.ruleForm.checkPass !== '') {
            this.$refs.ruleForm.validateField('checkPass');
          }
          callback();
        }
      };
      var validatePass2 = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请再次输入密码'));
        } else if (value !== this.ruleForm.pass) {
          callback(new Error('两次输入密码不一致!'));
        } else {
          callback();
        }
      };
    var checkPassword = (rule,value,callback) =>{
      if (value.length >= 8 && /^[*]+$/.test(value)) {
        callback();
        return;
      }
      const regex = /(?!^[a-zA-Z]+$)(?!^[A-Z0-9]+$)(?!^[A-Z\W_]+$)(?!^[a-z0-9]+$)(?!^[a-z\W_]+$)(?!^[0-9\W_]+$)^[^\s\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b\u4e00-\u9fa5]{8,20}/;
      if (!regex.test(value)) {
        callback(new Error("密码由8-20个字符组成,必须包含大小写字母,数字或标点符号(除空格)"));
      } else {
        callback();
      }
    }
    return{
      ruleForm: {
        pass: '',
        checkPass: ''
      },
      rules: {
        pass: [
          { validator: validatePass, trigger: 'blur' },
          { validator: checkPassword, trigger:'blur' }
        ],
        checkPass: [
          { validator: validatePass2, trigger: 'blur' }
        ]
      },
    }
  },