Javascript 正则表达式在应该失败时不会失败
我有一个正则表达式:Javascript 正则表达式在应该失败时不会失败,javascript,jquery,regex,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。我看不出我做错了什么。你忘了锚定表达式 var pa
var pat = new RegExp("[0-9]{1}\.[0-9]{1}");
我使用jQuery从文本框中获取数字,如下所示:
var theValue = $(item).val();
我一直在输入数字并用这行代码测试正则表达式:
alert(pat.test(theValue));
如果我输入数字111,它就通过了。不应出现这种情况,因为第一个数字必须是0-9,后跟一个句点,然后再后跟另一个数字0-9。我看不出我做错了什么。你忘了锚定表达式
var pat = new RegExp("^[0-9]{1}\.[0-9]{1}$");
你忘了锚定表达式
var pat = new RegExp("^[0-9]{1}\.[0-9]{1}$");
要在字符串中使用,需要转义
\
,以便显示反斜杠字符
var pat = new RegExp("[0-9]{1}\\.[0-9]{1}");
一种更简洁、或许更可靠的形式是:
/[0-9]\.[0-9]/
假设模式应该匹配一个数字,后跟一个句点和另一个数字。要在字符串中使用,需要转义
\
,才能显示反斜杠字符
var pat = new RegExp("[0-9]{1}\\.[0-9]{1}");
一种更简洁、或许更可靠的形式是:
/[0-9]\.[0-9]/
假设模式应该匹配一个数字,后跟一个句点和另一个数字。反斜杠执行的是字符串转义,而不是正则表达式转义。或使用:
new RegExp("[0-9]{1}\\.[0-9]{1}");
或者许多人喜欢的正斜杠()语法:
编辑:另外,正如上面ianpgall指出的,{1}是不必要的,因为字符类
[0-9]
不是惰性的,除非后面跟一个?
反斜杠是字符串转义,而不是正则表达式转义。或使用:
new RegExp("[0-9]{1}\\.[0-9]{1}");
或者许多人喜欢的正斜杠()语法:
编辑:另外,正如ianpgall在上面指出的,{1}是不必要的,因为字符类
[0-9]
不是惰性的,除非后面跟一个?
如果您用斜杠代替引号来编写正则表达式,这就很好了
var pat = /[0-9]{1}\.[0-9]{1}/;
var theValue = ".111";
alert(pat.test(theValue));
我会使用\d
而不是[0-9]
字符串中的
\.
正在转义字符串中的
,而不是在正则表达式中。所以你的正则表达式实际上是[0-9]{1}.[0-9]{1}
,它匹配一个数字,任何东西,然后是另一个数字。而不是数字、句点、数字。如果您使用斜杠来编写正则表达式,而不是引号,这就很好了
var pat = /[0-9]{1}\.[0-9]{1}/;
var theValue = ".111";
alert(pat.test(theValue));
我会使用\d
而不是[0-9]
字符串中的
\.
正在转义字符串中的
,而不是在正则表达式中。所以你的正则表达式实际上是[0-9]{1}.[0-9]{1}
,它匹配一个数字,任何东西,然后是另一个数字。看了最好的答案后,我想再加强一点,这样可以处理大多数情况
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");
参考在看了最好的答案后,我想再加强一点,这样可以处理大多数情况
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");
请参阅为什么要添加
{}
部分?能否在小提琴中复制?@ianpgall:{n}符号确保前面的表达式至少匹配n次。[0-9]{1}验证了一个数字在小数点之前和小数点之后各出现一次。@Sheridanbulger我知道它的作用,但我想我习惯了这样一个问题:为什么要添加{}
部分?你能用小提琴重现吗?@ianpgall:{n}符号确保前面的表达式至少匹配n次。[0-9]{1}让他确认一个数字在小数点之前和小数点之后各出现一次。@Sheridanbulger我知道它是什么,但我想我习惯了这不是它通过的原因。@acheong87:即使没有锚,111也不应该通过,因此,否决票。啊,我不同意,问题是这样的“第一个数字必须是0-9,后跟一个句点,然后再后跟另一个数字0-9“所以锚定也是达到预期结果的一个重要因素。@LeeKowalkowski:第一个数字不一定是第一个字符。@ianpgall:你怎么知道需要锚定?这不是它通过的原因。@acheong87:即使没有锚定,111也不应该通过,因此,否决票。唉,我不同意,问题是“第一个数字必须是0-9,后面跟一个句点,然后再跟另一个数字0-9”,因此锚定也是达到预期结果的一个重要因素。@LeeKowalkowski:第一个数字不一定是第一个字符。@ianpgall:你怎么知道需要锚定?+1来确定第一个字符,但是值得指出的是,{1}
从来都不是必需的,对于静态正则表达式,正则表达式文本(例如/\d\.\d/
)比正则表达式构造函数更好。如果只是出于风格的考虑。@LeeKowalkowski:两个观点都同意<代码>/[0-9]\.[0-9]/将是更好的样式。或者/\d\.\d/
尽管我不得不承认,我不记得\d
是否会匹配的不仅仅是0-9
。谢谢你,这总是很简单的。关于样式和{1}.+1,首先指出这一点很好,但值得指出的是,{1}
从来都不是必需的,并且regex文本(例如,/\d\.\d/
)比静态regex的RegExp构造函数更好。如果只是出于风格的考虑。@LeeKowalkowski:两个观点都同意<代码>/[0-9]\.[0-9]/将是更好的样式。或者/\d\.\d/
尽管我不得不承认,我不记得\d
是否会匹配的不仅仅是0-9
。谢谢你,这总是很简单的。关于样式和{1}的观点很好。既然正则表达式已经这样做了,并且已经声明了,为什么还要检查长度呢?另外,根据OP实际需要什么,他们可能或可能不想要一个数字,或者在一个字符串的中间,这是无济于事的。我同意,为什么麻烦为这个问题巩固答案(特别是如此糟糕)。目前的正则表达式不检查长度,但可以。e、 g./^\d\.\d$/
强制执行