【问题标题】:Regex - No repeation of period and comma and hyphen正则表达式 - 不重复句号、逗号和连字符
【发布时间】:2016-11-03 02:32:11
【问题描述】:

我正在尝试为地址创建一个正则表达式。

我目前有[a-zA-Z0-9-\\.\-\,\\-\s\n],但它匹配重复句点、重复连字符和重复逗号。有什么办法可以将逗号、连字符和句点的数量限制为 1?

它应该匹配"5432 Lorem St. Tokyo, Japan 1234-54"

它不应该匹配"5323 Dolor Ave... Kyoto,,,, Japan 555-33----33"

【问题讨论】:

  • 或许^[a-zA-Z0-9\s]+(?:[.,-][a-zA-Z0-9\s]+)*$
  • 您使用的是哪种语言或正则表达式引擎?
  • @cxw 我正在为 javascript 创建一个
  • 那么,试试/^[a-zA-Z0-9\s]+(?:[.,-][a-zA-Z0-9\s]+)*$/.test(str)
  • 试试/^(?!.*([.,-])\1)[a-zA-Z0-9\s.,-]+$/.test(str)

标签: javascript regex regex-negation


【解决方案1】:

这样的事情怎么样?

^([a-zA-Z0-9\s\n]|(([\.,-])(?!\3)))*$

因此,这匹配任何仅包含任意数量的字母、数字、空格或行空格或句点、逗号或连字符的字符串,而这些字符串不紧跟其后。

【讨论】:

    【解决方案2】:

    要禁止“逗号”、“点”或“连字符”集中的重复字符,您可以使用锚定在开头的否定前瞻:

    /^(?!.*([.,-])\1)[a-zA-Z0-9\s.,-]+$/.test(str)
      ^^^^^^^^^^^^^^^
    

    (?!.*([.,-])\1) 前瞻检查是否存在重复的逗号、点或连字符(请参阅([.,-])\1 - 后跟反向引用的捕获组),如果找到则匹配失败。

    此外,为了禁止部分匹配,锚点——^ 用于字符串的开头,$ 用于字符串的结尾——是必要的。

    【讨论】:

      【解决方案3】:
      [^a-zA-Z0-9-\.-\,\-\s\n][a-zA-Z0-9-\.-\,\-\s\n][^a-zA-Z0-9-\.-\,\-\s\n]
      

      是冗长的,但会匹配那些没有 (^) 在其两侧有另一个元素的元素中的一个。那是你想要的吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-31
        • 2020-04-11
        • 1970-01-01
        • 1970-01-01
        • 2021-09-17
        • 1970-01-01
        • 2021-10-19
        相关资源
        最近更新 更多