validation - VeeValidate 多个密码约束

标签 validation vue.js passwords vee-validate

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

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

最终,我们希望能够做这样的事情: enter image description here

VeeValidate 可以吗?或者是否有任何类似方法的示例?

最佳答案

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

VeeValidate only generates one message per field by default as it uses a fast-exit strategy when running the validation pipeline. [...] To disable this behavior you may want to configure the fastExit option in VeeValidate's config or use the continues modifier. (source)


对于要应用于密码的规则,可以使用现有的 min 最小长度规则。

对于其他规则(检查大写、小写、特殊字符和数字),这是关于正则表达式检查。 VeeValidate 实际上提供了一个 regex规则,但在您的情况下,您需要多个规则。

所以你需要定义 custom rules 。我在 created 的下面的片段中放了一些例子。钩子(Hook),但您也可以全局定义它们。


在我的示例中,我创建了一个方法来返回一个 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>

关于validation - VeeValidate 多个密码约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55170199/

相关文章:

vue.js - 类型错误 : Invalid attempt to spread non-iterable instance in VueJS using Vuesax table

javascript - 如何在VueJS上使用数据函数的变量?

azure - azure devops 上的 Vitest 覆盖范围

validation - Sequelizejs - allowNull 的自定义消息

Excel VBA : Named range + string value as validation list?

java - 使用 Apache POI 我可以阻止用户复制格式吗?

asp.net-mvc - 是否应该始终在模型级别强制执行验证规则?

php - 加密密码并存储在android上的数据库中

php - 登录系统[php + mysql]

r - 在 R 中加密密码 - 使用 RODBC 连接到 Oracle 数据库