【问题标题】:Regular expression for optional commas with a 6 character limit可选逗号的正则表达式,限制为 6 个字符
【发布时间】:2012-03-23 14:53:13
【问题描述】:

我需要一个允许数字和可选逗号的正则表达式,但整个长度不能大于 6。

^[0-9]+([,]*[0-9]+)*$ 允许使用数字和可选逗号。

^([0-9]+([,]*[0-9]+)*){0,6}$ 不限制总长度为 6。

【问题讨论】:

  • 是可选的逗号(复数)还是只有一个逗号?
  • 查看一些匹配的示例和其他不匹配的示例会很有帮助。
  • 逗号可以在前面和/或后面吗?多个逗号?多个逗号顺序? ,2,,3, 有效吗?

标签: regex


【解决方案1】:

如果您的正则表达式引擎支持前瞻断言(大多数都支持),那么您可以编写:

^(?=[0-9,]{1,6}$)[0-9]+(,[0-9]+)*$

(?=[0-9,]{1,6}$) 部分是“肯定的前瞻断言”,意思是“从字符串中的这一点向前看,我看到了[0-9,]{1,6}$”。所以,本质上,上面的正则表达式是这两者的结合:

^[0-9,]{1,6}$
^[0-9]+(,[0-9]+)*$

并强制执行它们。

(也就是说,如果您只是将长度限制作为一个单独的步骤执行,而不是将上述内容合并到单个正则表达式中,可能会更清楚。)

【讨论】:

    【解决方案2】:
    ^([\,0-9]{0,6})$
    

    这个正则表达式只允许任何字符(逗号、零到九)从零到六次。

    如果您要求输入以数字开头,请使用:

    ^([0-9]{1}[\,0-9]{0,5})$
    

    【讨论】:

    • 我想 OP 不希望字符串连续包含多个逗号,或者以逗号结尾。
    • 也许不是,尽管他确实说过 commas,因为它允许有多个。
    • @ruakh - 按照他的正则表达式示例,4,,5 是可能的,但是,@JYelton - 它看起来也必须有数字书挡,但你的会匹配 4,,5,,跨度>
    • 哦,好吧,当 OP 遗漏细节时,你能做什么?
    • 我同意 OP 遗漏了重要的细节,我也以复数形式阅读了 commas,但由于他强调 optional 是逗号,而不是数字可选,所以,恕我直言,错误的。必须至少包含一个数字,但不一定在第一个位置。
    【解决方案3】:

    一些额外的方法 -

    ^(?=.{1,6}$)\d+(?:,?\d)*$
    
    ^(?=.{1,6}$)\d(?:[,\d]*\d)?$
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多