正则表达式在javascript中无法正常工作

时间:2012-08-01 16:48:46

标签: javascript regex

我遵循正则表达式:^-?([0-9]{0,3}$|[0-9]{0,2}\.?[0-9]{0,1}$)

它不应该允许4位数字,例如4444.如果我尝试here,表达式工作正常,但在javascript中,代码没有按预期工作。它允许4位数字。所有其他验证都可以正常工作。

这是我的代码:

http://jsfiddle.net/PAscG/

reg0str = "^-?([0-9]{0,3}$|[0-9]{0,2}\.?[0-9]{0,1}$)";
var reg0 = new RegExp(reg0Str);
if (reg0.test(temp)) return true;

更新功能:

我想只允许3位数。所以我要么只允许十进制后的1位数和小数点前的2位数,要么在十进制之前允许最多3位数,在十进制之后不允许任何内容。

所以我的第一部分:
[0-9]{0,3}$我认为这应该允许最多3位数而且只允许数字。

下一部分:[0-9]{0,2}\.?[0-9]{0,1}$应允许小数点前最多2位数,小数点后最多1位数。

3 个答案:

答案 0 :(得分:1)

试试这个:

 var reg0str = "^\-?[0-9]{0,2}[\.]?[0-9]?$";

我不知道为什么,但如果没有封装在一个类中,那么这段时间似乎被视为通配符。

这是更新后的jsfiddle

答案 1 :(得分:1)

遵循OP的澄清

正则表达式是

/^-?(\d{0,3}\.?|\d{0,2)\.\d)$/

  ^        start of string
  -?       optional minus sign (use [-+]? if you accept a plus sign)
  (        start of OR group
    \d{0,3}  0 1, 2 or 3 digits
    \.?      optional decimal point
  |        OR
    \d{0,2}  0 1, or 2 digits
    \.       decimal point
    \d       final decimal
  )        end of OR grouping
  $        end of string

答案 2 :(得分:1)

"…\.…"是一个字符串文字 - 反斜杠将点转换为点,正则表达式点匹配一个数字。您需要转义反斜杠以在RegExp构造函数中传递带反斜杠的字符串:

new RegExp("^-?([0-9]{0,3}$|[0-9]{0,2}\\.?[0-9]{0,1}$)")

或者你使用正则表达式文字(简化,但仍然匹配相同):

/^-?\d{0,2}\.?\d?$/