2012-11-03 94 views
3

我需要使用JavaScript验证数字字符串,以确保数字具有精确的两位小数。在小数点后强制执行2位数的正则表达式

验证将通过仅当

  1. 数量有精确的小数点后两位
  2. 有小数点前至少一个数字。 (可能为零)
  3. 小数点前的数字不能以多于一个零开始。

有效数字:

0.01 
0.12 
111.23 
1234.56 
.67 
123.00 
0.00 

无效号码:

.12 
1.1 
0.0 
00.00 
1234. 
1234.567 
1234 
00123.45 
abcd.12 
12a4.56 
1234.5A 

我已经试过正则表达式[0-9][\.][0-9][0-9]$,但它允许小数点像12a4.56前的字母。

回答

4

.匹配任何字符,它不会做什么,你认为它。你必须逃避它。另外,你还有两个错误;尝试

^[0-9]+\.[0-9][0-9]$ 

代替,甚至更好,使用\d为十进制数字:

^\d+\.\d\d$ 
+0

嗨H2C03,你的表情接受.12,.34等不应该传递的内容。 –

+0

@ManasSaha啊,所以你想在小数点前至少有一个数字。这个给你。 – 2012-11-03 10:46:57

+0

这个完美的作品!谢谢一吨:-) –

3

您不需要正则表达式。

JavaScript有一个功能toFixed(),可以做你所需要的。

var fixedtotwodecimals = floatvalue.toFixed(2); 
+0

我相信OP想验证用户输入(我。即一个布尔值),如果它无效,则不正确/修复它。 – 2012-11-03 10:43:02

+1

是...所以将原始值与toFixed值进行比较。你仍然不需要正则表达式。 – Spudley

+0

+1用于提示有效的选择。 – phant0m

0
var values='0.12'; 

document.write(values.match(/\d+[.]+\d+\d/)); 

变化值,只要你想,并检查它

+0

检查这个http://jsfiddle.net/p6EaG/ –

0

这就是:

^(0[.]+\d{2})|^[1-9]\d+[.]+\d{2}$ 
+0

这是错误的,它匹配例如'0.110.11'。你错过了括号,在'|'错误之后的'^''[。] +'不应该有'+'。 – phant0m

4

This covers all requirements

^(0|0?[1-9]\d*)\.\d\d$ 
  • 数量有精确的小数点后两位
    • 中平凡满足,因为非可选\.\d\d$

其他两个条件可如下重述:

  • 小数点前的数字是一个零
  • 或数恰好与一个零,然后一个数字,做

开始这是覆盖在这两种情况下:

  • 0
  • 0?[1-9]\d*
相关问题