需求:只能输入18位纯数字,并且输入其他字符时删除其他字符
1、<input type="number">还是可以输入e和e-,不符合
2、<input type="text" maxlength="18" >限制了18位,但不能指定只输入数字,type="number"和配合时maxlength长度限制失效,不符合
3、<input type="number"oninput="if(value.length>18)value=value.slice(0,18)" >能限制数字又能限制长度,看似没问题,但在开头或中间加上字母e,长度限制将失效,不符合
4、<input type="number" onkeyup ="value=value.replace(/[^\d]/g,'')">能限制它不能输入其他字符了,但写上字母e时整个input的内容就全清空了,有点缺陷
5、<input type="text" onkeyup="certNumOnkeyup(this)" >当不再局限与number类型,改成text类型时发现这个bug竟然消失了,输入e也只清空了e
最终代码:
<input type="text" id="certNum" placeholder="请输入证件号码" onkeyup="certNumOnkeyup(this)" oninput="if(value.length>18)value=value.slice(0,18)">function certNumOnkeyup(obj) {obj.value = obj.value.replace(/[^\d.]/g,"");//清除"数字"以外的字符obj.value = obj.value.replace(/^0+$/g,"");//以0开头时清空}