我想知道是否可以将多个密码要求传递给VeeValidate以显示用户缺少哪些要求。
例如,如果我们要求用户的密码至少应包含一个大写字母和至少一个数字且长度至少为5个字符,并且用户键入“a1bb”,我们希望能够显示两个错误消息;与未满足长度要求相关联的一个与未满足大写要求相关的一个。
VeeValidate会有可能吗?或者有类似方法的例子吗?
VeeValidate允许您显示多个错误字段,但您需要先禁用fastExist
配置选项:
VeeValidate默认情况下每个字段仅生成一条消息,因为它在运行验证管道时使用快速退出策略。 [...]要禁用此行为,您可能需要在VeeValidate的配置中配置fastExit选项或使用continue修饰符。 (source)
对于要应用于密码的规则,可以使用现有的min
规则获得最小长度。
对于其他规则(检查大写,小写,特殊字符和数字),它是关于正则表达式检查。 VeeValidate实际上提供了regex
规则,但在您的情况下,您需要多个规则。
所以你需要定义custom rules。我在created
钩子的下面的代码段中添加了一些示例,但您也可以在全局中定义它们。
在我的示例中,我通过按规则名称检查错误来创建一个返回css类error
的方法。(source)
现在的风格是你的。
const config = {
fastExit: false
}
Vue.use(VeeValidate, config)
new Vue({
el: "#app",
data() {
return { password: '' }
},
created() {
this.$validator.extend('upCase', {
getMessage: () => "One uppercase character",
validate: value => value.match(/[A-Z]/g) !== null
})
this.$validator.extend('number', {
getMessage: () => "One number",
validate: value => value.match(/[0-9]/g) !== null
})
},
methods: {
errorClass(rule) {
return {
'error': this.errors.firstByRule('password', rule)
}
}
}
})
li {
color: #B1B1B1;
}
li.error {
color: #262626;
}
<script src="https://unpkg.com/[email protected]/dist/vue.min.js"></script>
<script src="https://unpkg.com/[email protected]/dist/vee-validate.js"></script>
<div id="app">
<input type="text" v-validate="'min:8|number|upCase'" name="password" >
<ul>
<li :class="errorClass('upCase')">One uppercase character</li>
<li :class="errorClass('number')">One number</li>
<li :class="errorClass('min')">8 characters minimum</li>
</ul>
</div>