正则表达式,如何限定输入的是浮点数,且整数位8位,小数位2位

正则表达式,如何限定输入的是浮点数,且整数位8位,小数位2位

问题描述:

正则表达式,如何限定输入的是浮点数,且整数位8位,小数位2位,数据库对应字段为Numric(10,2)。现在要求如果只输入整数的话,只允许输入8位,如:12345678,如果带小数的话,整数位也最多8位,但可以加小数点后2位,如12345678.12是符合要求的,现在不知道正则表达式该如何写。 [color=red]/\d{1,8}.{0,1}\d{0,2}/[/color]如果这样写的话,可以输入10位整数,[color=red] /\d{1,8}.\d{0,2}/[/color]如果这样写,文本框中无法输入任何字符。希望有人指点一下。谢谢。

[code="js"]
function CheckInputFloat(input) {
var reg = /\d{1,8}.{0,1}\d{0,2}/;

if (reg.test(input))

{

if(input.indexOf('.') != -1)
{
return true;
}
}
return false;
}
[/code]
另外把这个事件绑定到控件的onblur上

[code="js"]/(\d{1,8}.{0,1}\d{0,2})|(\d{1,8}.\d{0,2})/[/code]

不好意思 刚错了
[code="js"]
/(\d{1,8})|(\d{1,8}.\d{0,2})/
[/code]

/(\d{1,8})|(\d{1,8}\.\d{0,2})/

这个可以的
/(\d{1,8})|(\d{1,8}\.\d{0,2})/

把你代码粘出来

我测试了 但是没有出现lz的错误
代码如下
[code="js"]
var reg = /(^\d{1,8})|(^\d{1,8}.\d{0,2})/;
if (!reg.test("22222222a2.2"))
{
alert("error");
}
[/code]

但是这个还是有问题
因为测试例子中的22222222a2.2明明是错误的
确因为匹配了前面的22222222而返回正确的结果

最大长度应该是10吧 maxlength=10

如果lz不介意的话可以采用 /\d{1,8}.{0,1}\d{0,2}/匹配

匹配成功后 再check是否有'.',如果没有 一样返回匹配失败 呵呵

你想要实现的效果是怎样的,看你那方法太怪了,

怎么还是绑定在onpropertychange事件上?

正则没有办法解决长度匹配的问题。
把 要解析的分2部分处理吧。
var re=/./;
var num='12345678.213';
var result= num.split(re);
alert( !isNaN(num) && result[0].length <=8 && ( !result[1] || result[1].length <=2 ) );

CheckInputFloat(oInput) 这个方法导致了死循环就出了stack overflow at line 0的问题