代码之家  ›  专栏  ›  技术社区  ›  dom

如何编写与AAAA00000000-0000匹配的regex模式?

  •  1
  • dom  · 技术社区  · 14 年前

    我需要一个正则表达式来匹配以下任何格式的字符串:

    1. “AAAA00000000”
    2. “AAAA00000000-0000”
    3. “0000000000”

    我有第一个和第三个模式,这是我想出来的

    ^(([a-zA-Z]{4}[0-9]{8})|([0-9]{10}))$
    

    我不能让它包括第二种模式。

    4 回复  |  直到 13 年前
        1
  •  5
  •   jensgram    14 年前
    ^[a-zA-Z]{4}[0-9]{8}(-[0-9]{4})?$
    

    也就是说, XXXXnnnnnnnn 还有一个 可选择的 -nnnn 部分。

    • XXX年nnnnnnnn
    • XXXXnnnnnnnn-nnnn

    您可以省略最外面的括号,因为此组等于整个匹配项(捕获组0)。

    编辑
    更新以匹配 nnnnnnnnnn ,也是:

    ^[0-9]{10}|[a-zA-Z]{4}[0-9]{8}(-[0-9]{4})?$
    

    比赛:

    • nnnnnnnnnn
    • XXX年nnnnnnnn
    • xxxnnnnnnnnnnnn年

    编辑#2
    作为对评论的回应,这是我能想到的最短/最可读的:

    ^[0-9]{10}|[a-zA-Z]{4}[0-9]{8}(-[0-9]{4}|)$
    

    与上述特性相同。

        2
  •  0
  •   Diego Sevilla    14 年前

    您缺少第二种格式的“-”。。。

        3
  •  0
  •   Thomas    14 年前

    ^\w{4}\d{8}(-\d{4})?$

    修正了打字错误

        4
  •  0
  •   Conner    12 年前
    ^[a-zA-Z]{4}([0-9]{8}|[0-9]{8}\-[0-9]{4})$