VeeValidate多个密码约束

时间:2019-03-14 19:01:53

标签: validation vue.js passwords vee-validate

我想知道是否有可能将多个密码要求传递给VeeValidate,以显示用户缺少的要求。

例如,如果我们要求用户的密码应至少包含一个大写字母和至少一个数字,并且长度至少为5个字符,并且用户键入“ a1bb”,我们希望能够显示两个错误消息;一种与长度要求不相关,而另一种与大写要求不相关。

最终,我们希望能够执行以下操作: enter image description here

使用VeeValidate可以吗?还是有类似方法的例子?

2 个答案:

答案 0 :(得分:1)

VeeValidate允许您显示多个错误字段,但是您需要先禁用fastExist配置选项:

  

VeeValidate 默认情况下每个字段仅生成一条消息   运行验证管道时的快速退出策略。 [...]要禁用此行为,您可能需要配置   VeeValidate的配置中的fastExit选项,或使用Continues修饰符。 (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/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>

答案 1 :(得分:0)

检查此解决方案

创建自定义规则表单VEEVALIDATE

严格的密码验证

http://frankclark.xyz/veevalidate-strong-password-and-confirmation-validation