87,907
社区成员
发帖
与我相关
我的任务
分享
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>无标题页</title>
<script type="text/javascript">
//控制文本框输入必须符合数据库中decimal格式(len,x)
//(4,2)有效长度4,即去除小数点最多4位,小数点部分最多2位
//1111 111.1 1.2 11.22 true
// 1111.22 1111.222 false
window.onload= function() {
var t1=document.getElementById('t1');
var len=4,x=2;
if(x==0) {
str="^(?!0{2,})(?!0\\d+)\\d{0,"+len+"}$";//小数位0
} else if(x==1) {//小数位1时
str="^(?!0{2,})(?!0\\d+)(?:\\d{1,"+(len-x)+"}\\.?[\\d+]{0,"+x+"})(?!\\.)$";
} else {//小数位>=2
str="^(?!0{2,})(?!0\\d+)(?:\\d{1,"+(len-x)+"}\\.?[\\d+]{0,"+x+"}|\\d{1,"+((len-x)+1)+"}\\.?[\\d+]{0,"+(x-1)+"})(?!\\.)$";
}
var reg=new RegExp(str);
t1.onpropertychange= function() {
if(this.value.length>0) {
if(!reg.test(this.value)) {
this.value=this.value.substring(0,this.value.length-1);
//每次删除value最后一个字符,再赋值value之后当然就又会自动触发onpropertychange
//如果不满足正则,就又会再删一个字符,就这样不断触发onpropertychange直到正则验证通过
//IE8下会出现间歇性触发的问题,输入aa就看到效果了,输第一个a之后触发了把a删掉,输第二个a时候就不会触发了
//如果给文本框加个padding:0就正常了,但是如果再加上width:100px就又复发了
//去掉DOCTYPE头也可以 但是你懂得,影响页面布局了
}
}
return false;
};
};
</script>
</head>
<body>
<input type="text" id="t1" style="padding:0;" />
</body>
</html>