开发者问题收集

有没有什么办法可以通过 NOT REQUIRED v-text-field 规则的验证?

2019-05-30
3204

我尝试验证 v-text-field 是否仅输入数字,但这不是 必需的 ,规则拒绝通过验证。

我使用了 v-form、v-text-field 和 v-text-field 规则。

<template>
  <v-form ref="form">
    <v-text-field
      v-model="name"
      :label="label"
      :rules="rules"
      @blur="changeValue"
      clearable
    ></v-text-field>
  <v-btn @click="send">submit</v-btn>
</v-form>
</template>

<script>
export default {
  data() {
    return {
      name: "",
      rules: [
        v =>
          v.length <= 50 || "maximum 50 characters",
        v =>
          (v.length > 0 && /^[0-9]+$/.test(v)) || "numbers only"
      ]
    };
  },
  methods: {
    changeValue(event) {
      this.$emit("changeValue", event.target.value);
    },
    send() {
      const valid = this.$refs["form"].validate(); // doesn't pass
      if (valid) {
        this.$store.dispatch("xxx", {
          ...
        });
      }
    }
  }
};
</script>

单击提交按钮时,显示 v-text-field 的错误消息,并且 valid 为 false。

单击 X(清除图标),错误消息也会显示在控制台上:

"TypeError: Cannot read property 'length' of null"
3个回答

有点晚了,但是我已经用这个函数解决了它:

rules: [
  v => {
    if (v) return v.length <= 50 || 'maximum 50 characters';
    else return true;
  },
],
benne
2020-02-13

我将这种方式用于电子邮件,一个用于名称

499918486
Zoha Shobbar
2020-09-23

通过向任何规则添加 !v || ,您可以使其“不是必需的,但如果存在,则必须遵循规则”。 因此,这是您的规则部分的代码:

rules: [
        v => !v || (v && v.length <= 50) || `Maximum 50 characters`,
        v => !v || (v && v.length > 0 && /^[0-9]+$/.test(v)) || "numbers only"
]
Sinisa Rudan
2023-09-23