输入框限制只能输入数字,正数,保留3位小数,整数部分最长11位
oninput="value=value.replace(/[^\d{1,11}(\.\d)?$]/g,'')
如题,请问这样为什么不行呢?保留小数三位我在@change里做了
输入框限制只能输入数字,正数,保留3位小数,整数部分最长11位
oninput="value=value.replace(/[^\d{1,11}(\.\d)?$]/g,'')
如题,请问这样为什么不行呢?保留小数三位我在@change里做了
因为正则式只是一种判断规则,它并不限制输入到底是什么,所以用规则式本身其实是不能限定什么的。
正则式用于内容规则限定的正确逻辑是:
注意4中规则式检验后的后续处理并不是规则式的能力,仅仅是调用规则式处理程序的一种安排。所以楼上把输入限制和格式校验分开是恰当的,当然这里输入限制中其实也可以局部利用规则式加速处理。
此外你的规则式/[^\d{1,11}(\.\d)?$]/g
的匹配的是所有不是数字符或{}(),.?
的字符,并不是你期望的。
可以都在input中处理,input或者value有两个状态,一个是新值,一个是旧值,用新值去检验是否符合规则,符合规则就赋予新值,否则赋予旧值。分页输入框或模拟的数值输入框基本是这个原理。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
你这样做不合适。应该把“限制输入”和“校验格式”两个逻辑分开做。
比如:
在
onInput
事件处理函数里只做“限制输入”逻辑,即只准许输入数字和小数点。onChange
或者onBlur
事件处理函数里校验输入的数据格式是否正确。