正则表达式应该没有失败

时间:2012-10-02 20:28:27

标签: javascript jquery regex

我有一个正则表达式:

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

我使用jQuery从文本框中获取数字:

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

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

alert(pat.test(theValue));

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

5 个答案:

答案 0 :(得分:6)

要在字符串中使用,您需要转义\以便显示反斜杠字符。

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

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

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

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

答案 1 :(得分:5)

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

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

或首选的正斜杠(RegExp literal)语法:

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

修改:另外,正如ianpgall指出的那样,{1}不是必需的,因为字符类[0-9]不是延迟的,除非后跟?。< / p>

答案 2 :(得分: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}。所以你的正则表达式实际上是{{1}},它匹配数字,任何东西,然后是另一个数字。而不是数字,句号,数字。

答案 3 :(得分:0)

你忘了锚定表达。

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

答案 4 :(得分: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");

参考 LIVE DEMO