我有一个正则表达式:
var pat = new RegExp("[0-9]{1}\.[0-9]{1}");
我使用jQuery从文本框中获取数字:
var theValue = $(item).val();
我一直在输入数字并用这一行测试正则表达式:
alert(pat.test(theValue));
如果我输入数字.111则通过。这不应该是这种情况,因为第一个数字必须是0-9,然后是一个句点,然后是另一个数字0-9。我看不出我做错了什么。
答案 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