如何创建正确的规则以通过vee-validate验证零

时间:2019-07-09 09:45:37

标签: vue.js vee-validate

“ vee-validate”:“ ^ 2.2.11”, “ vue”:“ ^ 2.5.16”,

我需要一个简单的规则,该规则应该是输入必须是必需的,数字且大于0。

因此,在这种情况下,如果我输入0,它将正确验证(返回false),但是如果我输入类似0.0的内容,vv将返回true。即使删除is_not:0,结果仍然相同。

<sui-input 
  type="text"
  v-validate="'required|decimal|is_not:0'"
  name="cellSize"
  v-model="cellSize">

3 个答案:

答案 0 :(得分:0)

您是否尝试使用正则表达式排除0?

示例:

<input v-validate="{ required: true, regex: /[1-9]*/ }">

答案 1 :(得分:0)

我找到了这个解决方案(保留所有大于0的内容)

<sui-input 
    type="text"
    v-validate="{ required: true, regex: /^(?=.*[1-9])\d+(\.\d+)?$/ }"
    name="cellSize"
    v-model="cellSize">
</sui-input>

答案 2 :(得分:0)

您还可以创建一个自定义规则,如下所示。

created() {
  this.$validator.extend(
  'greaterThanZero',{
   getMessage: field =>  field + ' needs to be > zero.',
   validate: (value) => {
     // value must be > zero
     if (value <= 0 ) return false;
     return true;
   }
  });
},

然后在您的字段实例上调用代码。

v-validate="'required|decimal|greaterThanZero'"

更多有关自定义规则的信息: https://baianat.github.io/vee-validate/guide/custom-rules.html#creating-a-custom-rule

,或者您也可以使用以下样式(例如,如果要添加多个规则)。在此处,代码将插入到您进行导入的区域中,即直接在脚本标签之后。

import { Validator } from 'vee-validate';

Validator.extend(
  'greaterThanZero',
  (value) => {
    // value must be > zero
    if (value <= 0 ) return false;
    return true;
  }
);
let instance = new Validator({ greaterThanZeroField: 'greaterThanZero' });

您现在可以使用以下代码在上方的样式中添加第二条规则:

 instance.extend('greaterThanMillion', {
 getMessage: field => field +' needs to be > 1,000,000',
 validate: value => (value > 1000000 ? false : true)
 });
 instance.attach({
 name: 'greaterThanMillionField',
 rules: 'greaterThanMillion'
  });

再次可以将第二条规则称为:

v-validate="'required|decimal|greaterThanMillion'"