vue 怎样根据后端返回来制定检验规则 如后端返回0 则任意包含 特殊字符,大写字母,小写字母,数字一种即可,如后端返回1则必须包含两种,如后端返回2则必须包含三种,如返回3则必须包含四种检验规则 并给出提示
时间: 2023-06-14 09:04:44 浏览: 100
在 Vue 中,可以使用自定义校验规则来实现根据后端返回来制定检验规则的需求。
首先,定义一个自定义校验规则函数,可以在组件的 `methods` 中定义:
```javascript
methods: {
validatePassword(rule, value, callback) {
// 根据后端返回的数据来制定校验规则
let complexity = this.complexity
let pattern = ''
switch (complexity) {
case 0:
pattern = /[!@#$%^&*()+\-=[\]{};':"\\|,.<>/?]/; // 包含特殊字符
break;
case 1:
pattern = /(?=.*[a-z])(?=.*[A-Z0-9])[a-zA-Z0-9!@#$%^&*()+\-=[\]{};':"\\|,.<>/?]/; // 包含至少一个小写字母、大写字母或数字
break;
case 2:
pattern = /(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9!@#$%^&*()+\-=[\]{};':"\\|,.<>/?]/; // 包含至少两种:小写字母、大写字母、数字
break;
case 3:
pattern = /(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*()+\-=[\]{};':"\\|,.<>/?])[a-zA-Z0-9!@#$%^&*()+\-=[\]{};':"\\|,.<>/?]/; // 包含至少三种:小写字母、大写字母、数字、特殊字符
break;
}
if (!pattern.test(value)) {
callback(new Error('密码不符合规则'))
} else {
callback()
}
}
}
```
在上面的代码中,我们定义了一个 `validatePassword` 方法,它接收三个参数:`rule` 是校验规则,`value` 是当前输入框的值,`callback` 是校验结果的回调函数。在方法中,我们根据后端返回的数据来确定密码的复杂度要求,然后使用正则表达式来进行校验。如果校验不通过,我们就调用 `callback` 函数返回一个错误信息,否则就调用 `callback` 函数返回空。
接下来,我们需要在表单中使用这个自定义校验规则。可以在表单的 `rules` 属性中定义一个新的校验规则:
```javascript
rules: {
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ min: 6, max: 20, message: '密码长度应为6-20个字符', trigger: 'blur' },
{ validator: this.validatePassword, trigger: 'blur' }
]
}
```
在上面的代码中,我们将自定义校验规则函数作为一个校验规则传递给了密码输入框的校验规则列表中。这样,当密码输入框失去焦点时,就会触发校验规则的执行,从而根据后端返回来制定检验规则。
最后,我们可以在模板中通过 `el-form` 和 `el-input` 组件来实现表单的显示和输入框的绑定:
```html
<el-form :model="form" :rules="rules">
<el-form-item label="密码" prop="password">
<el-input v-model="form.password" show-password></el-input>
</el-form-item>
</el-form>
```
在上面的代码中,我们将表单的数据模型和校验规则绑定到了 `el-form` 组件上,将密码输入框的值绑定到了表单数据模型中,并使用 `show-password` 属性来显示密码输入框的明文。这样,就完成了根据后端返回来制定检验规则的需求。
阅读全文