gpt4 book ai didi

javascript - 丹麦地址的正则表达式

转载 作者:行者123 更新时间:2023-12-03 02:38:43 25 4
gpt4 key购买 nike

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

  • Ørestads 大道 2B
  • 圣安娜广场 32 5
  • Syriensvej 24 6 th

要求是:

  • 最少 2 个“单词”(街道和门牌号)
    • 萨莫斯韦吉 3
  • 街道可以以 æøåÆØÅ 开始/结束
    • Ørestads 大道 33 号
    • 圣安娜广场 33
  • 门牌号必须以数字开头
  • 门牌号可以包含数字和大写字母 (0-9A-ZÆØÅ)
    • Øresundsvej 2B
  • 门牌号最大长度为 5
    • Øresundsvej 2923B
  • 门牌号后面可以有任何内容
    • Øresundsvej 292 街,阿迈厄岛

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

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

我无法使用“单词边界”(\w),因为街道可以以特殊字符(例如 æøåÆØÅ)开始/结束。除了\b 之外还有其他方法吗?

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

谢谢

最佳答案

首先,您的正则表达式似乎可以完成您想要的工作。在 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. 至于街道号码的长度,无论如何,您都接受门牌号码之后的任何内容,因此您需要在末尾添加一些额外的匹配条件。
    更改结尾会造成限制:([0-9]){1,5}\w?(\s.*)?$

总而言之,正则表达式可能如下所示:

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

看看它是否有效:regex101

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

关于javascript - 丹麦地址的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48423979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com