【问题标题】:VeeValidate multiple password constraintsVeeValidate 多个密码约束
【发布时间】:2019-08-05 19:13:43
【问题描述】:
我想知道是否可以将多个密码要求传递给 VeeValidate 以显示用户缺少哪些要求。
例如,如果我们要求用户的密码至少有一个大写字母和一个数字,并且长度至少为 5 个字符,并且用户输入“a1bb”,我们希望能够显示两条错误信息;一种与未满足长度要求相关,另一种与未满足大写要求有关。
最终,我们希望能够做这样的事情:
VeeValidate 可以实现吗?或者有没有类似方法的例子?
【问题讨论】:
标签:
validation
vue.js
passwords
vee-validate
【解决方案1】:
VeeValidate 允许您显示多个错误字段,但您需要先禁用 fastExist 配置选项:
VeeValidate 默认情况下每个字段只生成一条消息,因为它使用
运行验证管道时的快速退出策略。 [...] 要禁用此行为,您可能需要配置
VeeValidate 配置中的 fastExit 选项或使用 continue 修饰符。 (source)
对于您要应用于密码的规则,您可以使用现有的 min 规则作为最小长度。
对于其他规则(检查大写、小写、特殊字符和数字),这是关于正则表达式检查。 VeeValidate 实际上提供了一个 regex 规则,但在您的情况下,您需要多个。
所以你需要定义custom rules。我在下面的 created 钩子中的 sn-p 中放置了一些示例,但您也可以全局定义它们。
在我的示例中,我通过按规则名称检查错误来创建一个返回 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/vue@2.6.8/dist/vue.min.js"></script>
<script src="https://unpkg.com/vee-validate@2.0.0-rc.19/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>