0

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

它不应该允许 4 位数字,例如 4444。如果我在这里尝试,表达式工作正常,但在 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 位数字。

4

3 回答 3

1

试试这个:

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

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

这是更新的jsfiddle

于 2012-08-01T17:34:00.020 回答
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
于 2012-08-01T18:12:08.243 回答
1

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

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

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

/^-?\d{0,2}\.?\d?$/
于 2012-08-01T18:18:41.500 回答