记一个js校验只能输入数字的bug
问题
前台输入100a这样的数字js校验拦不住,导致后台保存的时候出错。js代码为
function isNum(str,name)
var reg = /^\d*$/;
if(reg.test(str)){
return true;
}
udesk.shouwarning(name+"必须为数字");
return false;
之所以拦不住是因为js里先把input里的值用paseInt函数做了处理,导致去掉了后面的字母a,所以才会每次都能校验通过,然后又导致后台报错。(写这个逻辑的人真的是该死一百次去)
解决
不想改原有的代码,一是因为感觉写的很垃圾,二是怕引起其他bug,,毕竟不是咱写的,所以在jsp页面用了一下方法
<input>
onkeyup="this.value=this.value.replace(/\D/g,'')"
onafterpaste="this.value=this.value.replace(/\D/g,'')"
<input/>
使前台根本输入不进去非数字的字符,粘贴也不行。
搞定!
扩展
js校验的正则
https://blog.csdn.net/Mr_LuoYanan/article/details/85620339
https://blog.csdn.net/caottao9527/article/details/79170073(input正则匹配只能输入数字和指定位数小数点)