【问题标题】:Regular expression for Dutch zip / postal code荷兰邮政编码的正则表达式
【发布时间】:2013-07-27 17:41:15
【问题描述】:

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

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

有效值:

1001aa  
1001Aa  
1001 AA

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

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

【问题讨论】:

  • 您在空格周围使用断点,您使用它们来定义一系列字符,例如[0-6] 执行 0 到 6。只需将其替换为 `?`(空格和问号使其可选
  • 顺便说一句:荷兰邮政编码从不以零开头。
  • 也没有以 SS、SA 或 SD 结尾的邮政编码。
  • 感谢 Arjan / Bart:您如何在 var rege = /^([0-9]{4} ?[a-zA-Z]{2})$/; 中定义这些额外规则
  • @Florian - 我在下面的答案中添加了一个最终测试,它将消除 SS、SA 和 SD。试试那个! :)

标签: javascript regex zipcode


【解决方案1】:

已编辑以处理荷兰邮政编码的前导 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 个 a-z 字符
  6. $ 匹配字符串的结尾
  7. 末尾的i 是不区分大小写的修饰符

【讨论】:

  • 是的,这也是一个正确的解决方案。正则表达式中的 + 是前一个字符正则表达式(或括号中的模式)的一个或多个“命中”。
  • 在此感谢您的帮助 - 已使用和支持
【解决方案2】:

如果您在将其用作引导验证模式时遇到问题,建议您将其更改为:

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

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

【讨论】:

    【解决方案3】:

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

    var rege = /^\d{4} ?[a-z]{2}$/i;
    

    【讨论】:

      【解决方案4】:

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

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

      ^[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. 负前瞻 (?!SA|SD|SS) 断言下面的正则表达式不匹配 第一种选择 SA SA 按字面意思匹配字符 SA(区分大小写) 第二备选 SD SD 按字面意思匹配字符 SD(区分大小写) 第三种选择 SS SS 从字面上匹配字符 SS(区分大小写)

      6. 匹配下面列表中的单个字符 [A-Z] {2} 与前一个标记完全匹配 2 次 A-Z 匹配 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>
      

      【讨论】:

      • 如果您有合适的工具(如 F12 按钮),仅在前端检查正确的输入仍然会使表单容易受到错误输入的影响。始终也在后端进行验证。
      猜你喜欢
      • 1970-01-01
      • 2021-10-13
      • 2020-01-05
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      相关资源
      最近更新 更多