jQuery:验证美国邮政的正则表达式不起作用
Posted
技术标签:
【中文标题】jQuery:验证美国邮政的正则表达式不起作用【英文标题】:jQuery: Regex to validate US postal doesn't work 【发布时间】:2022-01-14 07:55:06 【问题描述】:使用下面的代码,似乎没有任何效果。当我在 Zipcode 字段中键入非数字值时,没有警报消息。请帮我确定问题。
$("input:text[name='address_1[zip]']").keyup(function(e)
var charCode = (e.which) ? e.which : event.keyCode
if (String.fromCharCode(charCode).match(/^\d5(?:[-\s]\d4)?$/))
console.log("Please enter a number for zip code");
$("input[name='address_1[zip]']").val("");
return false;
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<input type="text" name="address_1[zip]" />
【问题讨论】:
【参考方案1】:这行得通 - 我们需要超时
const re = /(^\d5$)|(^\d5-\d4$)/;
$("input:text[name='address_1[zip]']").on("blur", function(e)
const $this = $(this);
if (this.value && !re.test(this.value)) setTimeout(function() $this.val(""); $this.focus() ,100);
);
.red border: 1px solid red
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<input type="text" name="address_1[zip]" /><input type="text" name="city" />
【讨论】:
是的,它确实有效。但它不接受 57401 - 57402 作为有效的美国邮政编码?你能给我一个完美的正则表达式来验证所有美国邮政编码吗 @PKTG 请查看更新 它没有将 57401 - 57402 视为有效的 ZIP。我自己查了【参考方案2】:您的正则表达式将只接受美国邮政编码的 5 位数字我不知道其余的分组正则表达式:
我为你更正了代码:(?:[-\s]\d4)
,它与您的需要无关。
jQuery("input:text[name='address_1[zip]']").keyup(function(e)
//var charCode = (e.which) ? e.which : event.keyCode
// no needed!
if (!$(this).val().match(/^\d5(?:[-\s]\d4)?$/))
alert("Please enter a number for zip code");
jQuery("input[name='address_1[zip]']").val("");
return false;
);
【讨论】:
谢谢约翰,您的代码是否涵盖所有美国邮政编码? 我没有更改正则表达式部分,如果您复制了 US Zip 的正则表达式,那么它将起作用 正则表达式有问题,当我输入数字时,它会提示说请输入邮政编码的数字 因为事件设置为keyup,每次用户写入,事件调用,如果数字长度.change()是个好主意 谢谢,它正在工作。但是,如果拉链错误,焦点会随着变化而消失。如果输入错误,如何让焦点保持在相同的输入上?以上是关于jQuery:验证美国邮政的正则表达式不起作用的主要内容,如果未能解决你的问题,请参考以下文章
美国邮政编码和加拿大邮政编码的 Angular ng-pattern 正则表达式代码 [关闭]