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>