js正则验证表单只能输入数字时问题

jsbuzhidao 2013-11-01 09:44:48
下面js是验证表单只能输入数字的,但是用键盘左右键的时候,一直跳到文字的最后,请问这要怎么改呢,谢谢

function inp(obj){
var regStrs = [
['^0(\\d+)', '$1'], //禁止录入整数部分两位以上,但首位为0
['[^0-9\]', ''] //禁止录入任何非数字和点
];
for(i=0; i<regStrs.length; i++){
var reg = new RegExp(regStrs[i][0]);
obj.value = obj.value.replace(reg, regStrs[i][1]);
}
}


<input name="" type="text" value="" onKeyUp="inp(this)">
...全文
790 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyqq12276419 2013-11-08
  • 打赏
  • 举报
回复
直接在你的输入框后面加上onKeyUp="value=value.replace(/[^1234567890]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^1234567890]/g,''))"
scscms太阳光 2013-11-01
  • 打赏
  • 举报
回复
//原因是因为每按一下键盘都触发正则,并对输入框赋值,所以光标老是跑到最后。(FF不会)
//解决方法:判断输入框的值有没有变化才触发正则替换。
<input name="" type="text"  value="" onKeyUp="inp(this)">
<script type="text/javascript">
    var v="";
    function inp(obj){
        if(obj.value!=v){
            v=obj.value;
            obj.value=obj.value.replace(/^0(\d+)+/g,'$1').replace(/[^\d\.]/g,'');
        }
    }
</script>
jiafeng_lee 2013-11-01
  • 打赏
  • 举报
回复
yongchen520 2013-11-01
  • 打赏
  • 举报
回复
当按左键键盘弹起的时候,又从新判断一下文本框中的值,它当然会跳到文字的最后,和你输入东西一样的效果
oggmm 2013-11-01
  • 打赏
  • 举报
回复
要想光标一直在最后 可以先清空 在重新赋值就是在最后了 var obj=document.getElementById("testId"); var val=obj.value; //obj.focus(); bj.value=""; obj.value=val;
天际的海浪 2013-11-01
  • 打赏
  • 举报
回复

var _value = "";
function inp(obj){
	if(_value==obj.value) return;
var regStrs = [ 
 ['^0(\\d+)', '$1'], //禁止录入整数部分两位以上,但首位为0 
 ['[^0-9\]', ''] //禁止录入任何非数字和点 
]; 
 for(i=0; i<regStrs.length; i++){ 
 var reg = new RegExp(regStrs[i][0],"g"); 
 obj.value = obj.value.replace(reg, regStrs[i][1]); 
 } 
 _value = obj.value;
}

似梦飞花 2013-11-01
  • 打赏
  • 举报
回复
但是用键盘左右键的时候,一直跳到文字的最后 完全不明白这句话的意思

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧