19

我正在尝试在 javascript 中构建一个正则表达式来验证荷兰邮政编码。

邮政编码应包含 4 个数字,然后是可选的空格,然后是 2 个(不区分大小写)字母

有效值:

1001aa  
1001Aa  
1001 AA

我现在有这个,但它不起作用:

var rege = /^([0-9]{4}[ ]+[a-zA-Z]{2})$/;
4

4 回答 4

66

编辑以处理荷兰邮政编码的前导 0 要求,并消除 SS、SA 和 SD 的匹配项。这应该为你做这一切。

最终正则表达式:

var rege = /^[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}$/i;

小提琴单元测试:http: //jsfiddle.net/hgU3u/

这是一个细分:

  1. ^匹配字符串的开头
  2. [1-9][0-9]{3}匹配单个非零数字和三个 0-9 数字
  3. ?匹配 0 或 1 个空格(您可以使用*匹配 0 或更多空格)
  4. (?!sa|sd|ss)是检查余数不是“sa”、“sd”或“ss”的前瞻测试。
  5. [a-z]{2}匹配 2 个 az 字符
  6. $匹配字符串的结尾
  7. i最后是不区分大小写的修饰符
于 2013-07-27T13:50:23.443 回答
7

如果您无法将其用作引导验证的模式,我建议您将其更改为:

    ^[1-9][0-9]{3} ?(?!sa|sd|ss|SA|SD|SS)[A-Za-z]{2}$

这样,它仍然不区分大小写并被引导验证器接受。

于 2017-03-02T12:57:58.200 回答
5

这是我的解决方案。最后的 i 使其不区分大小写:

var rege = /^\d{4} ?[a-z]{2}$/i;
于 2013-07-27T13:51:54.917 回答
0

排除的组合 ,SA SD SS需要紧跟在 ! 签署以提供有效的结果;所以,不是,! SA|SD|SS而是!SA|SD|SS他们引入了 :space: 代码。

我的荷兰 NL 邮政编码正则表达式:

^[1-9][0-9]{3}[[:space:]]{0,1}(?!SA|SD|SS)[A-Z]{2}$ or
^[1-9][0-9]{3}[ ]{0,1}(?!SA|SD|SS)[A-Z]{2}$ works also (depends on software version on your server, the [:space:] code is not always accepted)
  1. ^ 在行首断言位置

  2. 匹配下面列表中的单个字符 [1-9] 1-9 匹配 1(索引 49)和 9(索引 57)之间范围内的单个字符(区分大小写)

  3. 匹配下面列表中的单个字符 [0-9] {3} 匹配前一个标记 3 次 0-9 匹配 0(索引 48)和 9(索引 57)之间的单个字符(区分大小写)

  4. 匹配下面列表中存在的单个字符 [[:space:]] {0,1} 匹配前一个标记 0 到 1 次,尽可能多次,根据需要返回(贪婪) [:space:] 匹配一个空白字符,包括换行符 [ \t\r\n\v\f](也写为 \s)

  5. Negative Lookahead (?!SA|SD|SS) 断言下面的 Regex 不匹配 第一个替代 SA SA 匹配字符 SA 字面意思(区分大小写) 第二个替代 SD SD 匹配字符 SD 字面意思(区分大小写) 第三个替代 SS SS 匹配字符 SS 字面意思(区分大小写)

  6. 匹配下面列表中存在的单个字符 [AZ] {2} 与前一个标记完全匹配 2 次 AZ 匹配 A(索引 65)和 Z(索引 90)之间范围内的单个字符(区分大小写)

  7. $ 在行尾断言位置

我用它制作的 JavaScript 函数:

function checkpostcode(){
$("#result_postcode").text("");
var xpr="^[1-9][0-9]{3}[[:space:]]{0,1}(?!SA|SD|SS)[A-Z]{2}$";
var pcRegex = new RegExp(xpr,"g");
var pccheck = document.getElementById("id_postcode");
if(pcRegex.test(pccheck.value)){
$("#result_postcode").html("&nbsp;&nbsp;<i class=\"fa fa-check text-success\"></i>");
$("#result_postcode").css("color", "green");
$("#id_postcode").css("border", "2px solid green");
$("#id_postcode").css("background-color", "#bdf5bd");
    validator();
} else {
$("#result_postcode").html("&nbsp;&nbsp;<i class=\"fa fa-remove text-danger\"></i>");
$("#result_postcode").css("color", "red");
$("#id_postcode").css("border", "1px solid red");   
}}

这是从 PHP 中的表单输入字段调用的:

echo"<input type=\"text\" id=\"id_postcode\" name=\"postcode\" value=\"\" placeholder=\"4 cijfers spatie 2 letters\" style=\"width:50%\" oninput=\"checkpostcode();\" required>";
echo"<span id=\"result_postcode\"></span>";

validator()是一个 JavaScript 函数,它在每次输入字段发生更改以及页面首次完成加载时运行。它最终通过提供正确的 CSS 来显示该按钮来执行输入按钮的显示。

<script type="text/javascript" language="javascript">
$(document).ready(function(){
validator();
});
</script>

要显示禁用的按钮:

function validator(){
var postc=document.getElementById("id_postcode");
var h=postc.value.length;
if(h>0){
//als aan alle eisen voldaan wordt button vrijgeven
$("#maak_account_id").prop("disabled", false); //activeer de button
$("#maak_account_id").removeClass(); //opmaak wissen
$("#maak_account_id").addClass("button enabled"); //opmaak plaatsen
}else{
$("#maak_account_id").prop("disabled", true); //activeer een button
$("#maak_account_id").removeClass(); //opmaak wissen
$("#maak_account_id").addClass("button disabled"); //opmaak plaatsen

}

和表单按钮:

<input name="maak_account" id="maak_account_id" type="submit" value="Maak mijn account aan" style="float: right;" disabled>
于 2021-08-22T08:41:49.170 回答