input 输入框ios下 设置type=number无效

一、需求:

输入框实现 Input限制只输入数字。
技术:React;Ant-mobile-design

二、

一开始 采用input[type]=number来满足输入纯数字的需求,代码如下:

<Input type={'number'} placeholder={`请输入`} />

但是在ios中不生效,为了 兼容ios,加入了pattern="[0-9]*"属性或者inputMode

<Input type={'number'} pattern="[0-9]*" inputMode={'numeric'} placeholder={`请输入`} />

但是上述方法还有瑕疵:input仍可输入e, E, -, +等。

原因:e在数学上代表2.71828,所以它也还是一个数字。

为了实现 input限制只输入纯数字的目的,在网上找了很多方案发现用起来都不是很方便, 最后用正则来做是比较简单的。
解决方法:

// 校验
const numericalValidator = (_: any, value: any) => {
  var reg = /^[0-9]\d*$/;
  // 非必填
  if (value !== '' && !reg.test(value)) {
    return Promise.reject(new Error('请输入大于等于0的整数'));
  } else {
    return Promise.resolve();
  }
};


<Form form={form}>
  <Form.Item
    label={'label'}
    name={''}
    rules={[{ required: false, validator: numericalValidator }]}
  >
    <Input placeholder={`请输入`} />
  </Form.Item>
</Form>    

 

posted @ 2023-02-03 15:38  Morango  阅读(1118)  评论(0编辑  收藏  举报
*{cursor: url(https://files-cdn.cnblogs.com/files/morango/fish-cursor.ico),auto;}