丹麦语地址的正则表达式

时间:2018-01-24 13:44:51

标签: javascript regex

我正在尝试创建一个匹配丹麦地址的正则表达式,如:

  • ØrestadsBoulevard2B
  • SanktAnnæPlads32 5
  • Syriensvej 24 6 th

要求是:

  • min 2“words”(街道和门牌号码)
    • Samosvej 3
  • 街道可以用æøåÆØÅ开始/结束
    • ØrestadsBoulevard33
    • SanktAnnæPlads33
  • 门牌号必须以数字
  • 开头
  • 门牌号码可以包含数字和大写字母(0-9A-ZÆØÅ)
    • Øresundsvej2B
  • 门牌号码最大长度为5
    • Øresundsvej2923B
  • 任何东西都可以来自门牌号码
    • Øresundsvej292,Amager

到目前为止,我想出了这个,但我想知道它是否可以优化/“漂亮”

/^([a-zA-ZæøåÆØÅ]{2,40}\.?\s{1}){1,}([0-9]){1,}.*$/

我不能使用“Word Boundaries”(\ w)因为街道可以像æøåÆØÅ这样的特殊字符开始/结束。除了\ b以外还有其他办法吗?

此外,我的代码不会检查门牌号码长度。我该怎么做?

由于

1 个答案:

答案 0 :(得分:1)

首先,你的正则表达式似乎可以完成你想要的工作。在javascript中,你只能使用仍然频繁使用的最糟糕的正则表达式引擎之一,所以美化并不是那么简单。

/^
([a-zA-ZæøåÆØÅ]{2,40}\.?   # 1.
\s{1}){1,}                 # 2.
([0-9]){1,}                # 3.
.*$/
  1. 丹麦的地址是否仅限于40个字符?你能确定这个限制吗?您可以将大写+小写与单个组匹配:A-z
    如果您正在使用另一种正则表达式,我建议使用unicode语言分组(\p{L})而不是该字符组。查看示例here

  2. \s{1}是多余的,您可以安全地删除{1} 关于该组之后的{1,},可以用+

  3. 的简短形式编写。
  4. 至于街道号码的长度,您在任何情况下都接受门牌号后的任何内容,因此您最后需要一些额外的匹配标准。
    将结束更改为限制事项:([0-9]){1,5}\w?(\s.*)?$

  5. 总而言之,正则表达式看起来像这样:

    ^([A-zæøåÆØÅ]{2,40}\.?\s)+([0-9]){1,5}\w?(\s.*)?$
    

    看到它的工作:regex101

    简短免责声明:在regex101的示例中,您会看到一些匹配跨越2行。这是因为最后\s匹配换行符,.*匹配该行的其余部分。如果您在不太可能出现问题的表单中验证字段。