1

我有一个这样的正则表达式:

var pat = new RegExp("[0-9]{1}\.[0-9]{1}");

我使用 jQuery 从文本框中获取一个数字,如下所示:

var theValue = $(item).val();

我一直在输入数字并用这一行测试正则表达式:

alert(pat.test(theValue));

如果我输入数字 .111,它就会通过。这不应该是这种情况,因为第一个数字必须是 0-9,后跟一个句点,然后是另一个数字 0-9。我看不出我做错了什么。

4

5 回答 5

6

要在字符串中使用,您需要转义\以使反斜杠字符出现。

var pat = new RegExp("[0-9]{1}\\.[0-9]{1}");

更简洁,也许更可靠的形式是这样的:

/[0-9]\.[0-9]/

假设模式应该匹配一个数字,后跟一个句点,然后是另一个数字。

于 2012-10-02T20:31:04.620 回答
5

您的反斜杠正在执行字符串转义而不是正则表达式转义。要么使用:

new RegExp("[0-9]{1}\\.[0-9]{1}");

或首选正斜杠(RegExp 文字)语法:

/[0-9]{1}\.[0-9]{1}/

编辑:另外,正如 ianpgall 指出的那样,{1} 不是必需的,因为字符类[0-9]不是惰性的,除非后面跟着一个?.

于 2012-10-02T20:31:34.633 回答
3

如果你用斜杠而不是引号,这很好用

var pat = /[0-9]{1}\.[0-9]{1}/;
var theValue = ".111";
alert(pat.test(theValue));
​

我会用\d而不是[0-9]

\.在字符串中转义了.字符串中的,而不是在正则表达式中。所以你的正则表达式有效地[0-9]{1}.[0-9]{1}匹配一个数字,任何东西,然后是另一个数字。而不是数字,句点,数字。

于 2012-10-02T20:33:32.223 回答
0

在查看了最佳答案之后,我想到了更多的增强,以便可以处理大多数情况。

var pat = new RegExp("[0-9]{1}\\.[0-9]{1}");
var theValue = $("#item").val();
if (theValue.length == 3)
    alert(pat.test(theValue));
else
    alert("false");

参考现场演示

于 2012-10-02T20:48:55.907 回答
0

你忘了锚定表达式。

var pat = new RegExp("^[0-9]{1}\.[0-9]{1}$");
于 2012-10-02T20:31:03.967 回答