【问题标题】:Postcode and Country Match with Javascript使用 Javascript 匹配邮政编码和国家/地区
【发布时间】:2013-09-01 10:56:13
【问题描述】:

我在为这些情况运行正则表达式时遇到了一些困难 - 抱歉,我对正则表达式非常陌生,无法弄清楚。

图案如下所示:

  • 12(真)
  • 123(真)
  • 1234(真)
  • 12345(真)
  • 1 a...(假)
  • 12 a...(假)
  • 123 a...(假)
  • 1234 一个...(假)
  • 12345 米(真实)
  • 12345 mün(真)
  • 慕尼黑 123(假)
  • mün 12345(真)

所以如果与字母组合,邮政编码必须填满范围内给定的最大长度 喜欢{2,5}

我试过这个,但它不像我需要的那样工作:

/^([0-9]{2,5})(\s+[^a-zA-Z]{2,})?$/

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    有时,正则表达式并不是唯一的答案。

    if (there are letters in the string) {
        search for /\d{5}/
    } else {
        search for /\d{2,5}/
    }
    

    【讨论】:

      【解决方案2】:

      这行得通:

      /^([0-9]{5}\s[a-z]+)$|^([a-z]+\s[0-9]{5})$|^([0-9]{2,5})$/i(评论后编辑)

      注意 OR 运算符:

      匹配 [0-9]{5}\s[a-z]+[a-z]+\s[0-9]{5}[0-9]{2,5}

      您可以在单词匹配中添加任何国际字符,例如:[a-zä-üß],但根据您使用的语言,可能会支持更好的选项。

      测试 http://jsfiddle.net/zd4Qm/4/

      【讨论】:

      • "mün 123456789" 匹配模式,但邮政编码比允许的长。
      • “mün 12345”呢?它应该匹配但不匹配。 :)
      • 阅读我刚刚为 ü 等国际字符添加的注释,只需将 [a-z] 替换为 [a-zä-üß]
      • 这并不能解决问题。 /^([0-9]{2,5}\s[a-zä-üß]+)$|^([0-9]+)$/i.exec("mün 12345") 返回 null。
      • 哦等等!我错过了 OP 的一个案例
      猜你喜欢
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多