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 正则表达式代码 [关闭]

英国邮政编码正则表达式验证

jquery 验证正则表达式方法与 focusout 上的 jquery 掩码冲突

使用正则表达式验证英国邮政编码

用于验证邮政编码或城市的 JavaScript 正则表达式