代码之家  ›  专栏  ›  技术社区  ›  Tornike Shavishvili

如何编写一个regexp,它只允许数字和coma,并且只允许字符串的开头和结尾的数字?

  •  0
  • Tornike Shavishvili  · 技术社区  · 8 年前

    如何编写一个regexp,它将检查字符串的开头和结尾是否为数字,中间是否只包含数字和comas?comas还必须用至少一个数字彼此分开。对于上述条件,我有以下regexp: ^\d(,?\d)*$ 但我有以下附加条件:所有逗号分隔的整数,由数字序列组成,必须彼此不同。什么是只允许这种字符串的regexp?

    谢谢你

    1 回复  |  直到 8 年前
        1
  •  1
  •   Wiktor Stribiżew    8 年前

    首先,您的regex包含未量化的 \d ,而且只匹配个位数。你需要添加 + 之后 \丁 匹配一个或多个数字。

    为了避免重复值,可以使用

    ^(?!.*\b(\d+)\b.*\b\1\b)\d+(?:,\d+)*$
     ^^^^^^^^^^^^^^^^^^^^^^^
    

    regex demo

    这个 (?!.*\b(\d+)\b.*\b\1\b) 如果在除换行符以外的任何0+个字符之后,字符串中后面再次出现一组数字(在换行符以外的其他0+个字符之后),则为负先行,将导致匹配失败。

    细节

    • ^ -字符串开头
    • (?!.*\b(\d+)\b.*\b\1\b) -如果文本中出现相同的值,则会导致匹配失败的负展望
    • \d+ -1+位
    • (?:,\d+)* -零次或多次出现
      • , -逗号
      • \丁+ -1+位
    • $ -字符串结束。