最小/最大值验证 - Vuetify

10

我需要确保只能输入 5,000 到 50,000 之间的数字。我目前正在使用以下代码:

rules: {
     required: value => !!value || 'Required.',
     loanMin: value => value <= 5000 || 'Loan should be above £5000',
     loanMax: value => value >= 50000 || 'Max should not be above £50,000',
}

以下是应用于该领域的规则:

<v-text-field 
  height="5" 
  :rules="[rules.loanMin, rules.loanMaxMax, rules.required]" 
  editable 
  v-model="sliderLoan" 
  @change="principleLogger(sliderLoan)" 
  persistent-hint 
  outline 
  label="Loan Amount" 
  type="number"
></v-text-field>


如何将多个规则应用于一个字段?

我建议您在一个字段上使用vee-validate进行多个规则的验证。它非常易于集成和友好。 - Shreeraj
6个回答

15

在您的模板中

<v-text-field
    label="Example" 
    v-model="example" 
    :rules="exampleRules"
></v-text-field>

数据中

example: "",
exampleRules: [ 
    v => !!v || "This field is required",
    v => ( v && v >= 5000 ) || "Loan should be above £5000",
    v => ( v && v <= 50000 ) || "Max should not be above £50,000",
],

参考: https://vuetifyjs.com/zh-Hans/components/forms/,在 playground 下检查示例代码。

奖励: 不是此问题的一部分,但相关,在稍微更改后,您可以将其用于最小/最大长度验证。

example: "",
exampleRules: [ 
    v => !!v || "This field is required", 
    v => ( v && v.length >= 10 ) || "This field must have atleast 10 characters",
    v => ( v && v.length <= 100 ) || "This field exceeds maximum allowed characters",
],

6

我找到了另一个解决方案。

<v-text-field
    v-model="myNumber"
    :min="minValue"
    :max="maxValue"
    hide-details
    single-line
    type="number"
/>

其中minValue和maxValue在您的数据中被定义。


你的解决方案完美运作,但是...如何避免在字段中写入超过最大值的值?对于小值(例如20),您可以使用上/下选择器来处理,但对于最大值如4000,可能会很繁琐...有什么想法吗? - inane
1
我认为你应该添加上面答案中定义的“规则”。 - Tomas

4

Vue:

<v-text-field 
    height="5" 
    :rules="rules" 
    editable 
    v-model="sliderLoan" 
    @change="principleLogger(sliderLoan)" 
    persistent-hint 
    outline 
    label="Loan Amount" 
    type="number"
/>

脚本:

rules: [
         v => !!v || 'Required',
         v => v >= 5000 || 'Loan should be above £5000',
         v => v <= 50000 || 'Max should not be above £50,000',
    ],

1
你有一些错误。你写的是rules.loanMaxMax,应该是rules.loanMax。此外,你的规则需要反转符号。
rules: {
   required: value => !!value || 'Required.',
   loanMin: value => value >= 5000 || 'Loan should be above £5000',
   loanMax: value => value <= 50000 || 'Max should not be above £50,000',
 }

请查看codepen


1

需要自定义文本字段规则和自定义最小值和最大值字段。

<v-text-field
  height="5"
  :rules="[rules.loanMin(sliderLoan,5000,'USD'), rules.loanMaxMax(sliderLoan,50000,'USD')]"
  editable
  v-model="sliderLoan"
  @change="principleLogger(sliderLoan)"
  persistent-hint
  outline
  label="Loan Amount"
  type="number"
></v-text-field>

rules: {
   loanMin(value,min,currency) {
        return (value || "") >= min || `Loan must be at least ${min} {currency}`;
   },
   loanMaxMax(value,max,currency) {
        return (value || "") <= max || `Loan may not be greater than ${max} ${currency}.`;
   }
}

0

我在这个 Stack Overflow 页面中回答了这个问题。


只需将v-model变量作为第二个参数传递给您的规则即可。

<template>
  <v-input :rules=[rules.min(20, field1), rules.max(200, field1)] v-model="field1" />
</template>

<script>    
  data() {
    rules: {
      min(min, v) { 
        return (v || '').length >= min || `Value must be at least ${min}`;
      },

      max(max, v) { 
        return (v || '').length <= max || `Value may not be greater than ${max}.`;
      }
    }
  }
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接