JavaScript正则表达式邮政编码验证问题

4
我正在使用以下正则表达式验证5位邮政编码。但它无法工作。
var zipcode_regex = /[\d]{5,5}/;
if (zipcode_regex.test($.trim($('#zipcode').val())) == false)
alert('invalid zipcode');

在这段代码片段中,我还使用了jQuery。


1
但它没有起作用。发生了什么,你期望发生什么?请提供一些示例输入和输出,并更加精确。 - Felix Kling
2个回答

6
你的正则表达式也会匹配字符串中任意位置的五位数字子串。如果你想要验证“仅为五位数字,没有其他内容”,那么你需要anchor你的正则表达式:
var zipcode_regex = /^\d{5}$/;
if (zipcode_regex.test($.trim($('#zipcode').val())) == false)
    alert('invalid zipcode');

而且您可以更轻松地获得:

if (!(/^\s*\d{5}\s*$/.test($('#zipcode').val()))) {
    alert('invalid zipcode');
}

0

这个正则表达式仅匹配5位数字:

/^\d{5}$/

你能解释一下它们的区别以及为什么这有帮助吗? - Felix Kling
嗯,我们不知道OP的问题是什么。但我认为你是对的。你需要用^$来锚定表达式。否则,\d{5}会匹配至少有5个数字的任何字符串。这就是我想要的 ;) - Felix Kling
@FelixKling:哎呀,我刚开始阅读Neevek的答案时真的没有注意到锚点。如果我看到了,我就不会写我的答案了。 - Tim Pietzcker
@Tim:好的,你提供了缺失的解释 :) - Felix Kling
锚点是在我发布原始答案后的1秒钟内添加的。我想正是在那1秒钟内,你读了我的原始答案。所以没关系。 - neevek
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接