Vuetify表单验证-为匹配输入定义ES6规则

ste*_*nmd 8 validation ecmascript-6 vue.js vuejs2 vuetify.js

我有一个(Vuetify)表单,其中包含使用ES6和正则表达式检查其是否为有效电子邮件的电子邮件输入。我将如何设置另一个emailConfirmationRules规则集以检查emailConfirmation输入是否与输入匹配email

<template>
  <v-form v-model="valid">
       <v-text-field label="Email Address"
            v-model="email" 
            :rules="emailRules"
            required></v-text-field>

       <v-text-field label="Confirm Email Address"
            v-model="emailConfirmation" 
            :rules="emailConfirmationRules"
            required></v-text-field>
   </v-form>
 <template>

export default {
    data () {
      return {
         valid: false,
         email: '',
         emailConfirmation: '',
         emailRules: [
             (v) => !!v || 'E-mail is required',
             (v) => /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(v) || 'E-mail must be valid'
        ],
        emailConfirmationRules: [
            (v) => !!v || 'Confirmation E-mail is required',
        ]   (v) => ??? || 'Confirmation E-mail does not match'
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 12

规则不是处理字段确认的正确方法。 仅在emailConfirmation更改时才触发emailConfirmationRules,但如果再次更改电子邮件,则在不违反任何规则的情况下,您的字段将不再匹配。

您必须手动处理此问题:

methods: {
  emailMatchError () { 
    return (this.email === this.emailConfirmation) ? '' : 'Email must match'
  }
}
Run Code Online (Sandbox Code Playgroud)
<v-text-field v-model='emailConfirmation' :error-messages='emailMatchError()'></v-text-field>
Run Code Online (Sandbox Code Playgroud)

可能也有使用vee-validate执行此操作的替代方法。

  • 这是好方法,但最好的方法是将此方法放在计算中 (3认同)

小智 5

您可以使用计算规则来完成相同操作。

computed: {
    emailConfirmationRules() {
      return [
        () => (this.email === this.emailToMatch) || 'E-mail must match',
        v => !!v || 'Confirmation E-mail is required'
      ];
    },
}

Run Code Online (Sandbox Code Playgroud)