vue elementui表单只做数字验证

需求:vue elementui表单只做数字验证,不要非空验证

<el-form-item prop="grpContNo"
    label="单号"
    :rules="[{type:'number',required: false, message: '请输入数字类型', trigger: 'blur,change'}]"
>
    <el-input v-model.number="form.grpContNo"></el-input>
</el-form-item>

单号例子:000002257009088
复制到输入框自动把零去了
clipboard.png

问题:
开头输入不了0
required: false还有非空验证

阅读 14.8k
4 个回答

1、.number修饰符
.number修饰符的本质操作是在input失去焦点时,用parseFloat()转换你输入的值,能成功解析的,都会转换成数学上有意义的数字,数据类型为Number,无意义的0都会被省略。而无法被 parseFloat() 解析(即 parseFloat(val) //NaN),则会返回原始的值,而且其类型仍然是String字符串类型。

所以,你只要运用.number修饰符,'000002257009088'就总会被转换。

2、检验规则 type:'number',
检验规则 type:'number',是判断数字类型的数据的,在没有.number修饰符的转换下,即使键入了一个“貌似”是数字的值(比如12),但其本质都是String字符串类型,所以你所有的输入都是会报错的。

所以type:'number'必须和.number修饰符一起使用,所以导致type:"number"也只能校验有实际数学意义的数字

3、基于以上两点,你这种,只能用自定义校验,正则表达式,当然你仍然可以在input标签上用原始的type="number"属性,这样可以保证值能键入数字

你不能用数字去存000002257009088,你只能用字符串存'000002257009088',然后用正则判断

rules 里加上 type:Number

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题