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

How to create correct rule for validating zero via vee-validate

"vee-validate": "^2.2.11", "vue": "^2.5.16",

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

所以在这种情况下,如果我输入 0,它会正确验证(return false),但如果我输入类似这样的 0.0 vv returns true。即使我删除 is_not:0,结果仍然相同。

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

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

示例:

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

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

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

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

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

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

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

更多关于自定义规则的信息: https://vee-validate.logaretm.com/v2/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 true;
    return false;
  }
);
let instance = new Validator({ greaterThanZeroField: 'greaterThanZero' });

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

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

同样可以调用第二条规则如下:

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