【问题标题】:RegEx failing for strings with less than 3 charactersRegEx 对少于 3 个字符的字符串失败
【发布时间】:2013-12-19 04:57:44
【问题描述】:

我正在使用正则表达式来测试字符串是否有效。字符串必须以数字 ([0-9]) 开头和结尾,但可以包含逗号。

我想出了这个例子,但是对于少于 3 个字符的字符串它会失败(例如 1151,8 一样有效)。大概这是因为我正在专门测试第一个和最后一个字符,但我不知道有其他方法可以做到这一点。

如何更改此 RegEx 以符合我的要求。谢谢。

^[0-9]+[0-9\,]+[0-9]$

【问题讨论】:

  • ^(?!,)[0-9,]*[0-9]$
  • 你在使用 Javascript RegEx 吗?

标签: regex


【解决方案1】:

使用这个:

^[0-9]+(,[0-9])?$

,[0-9] 部分是可选的

可视化:

如果您想允许多个逗号数字组...然后将 ? 替换为 *

如果您想在逗号后面允许数字组(在您的示例中似乎不是这种情况),那么您也应该在该数字组后面加上 +

如果上述两个都需要,您的最终正则表达式可能如下所示:

^[0-9]+(,[0-9]+)*$

【讨论】:

  • 在 192312,9888 上失败。从 OP 获得确切的要求可能会很好,但到目前为止,它唯一的开头和结尾是一个带有逗号的数字。
  • 谢谢,但在 1,2,3 上失败了
  • @DavidGard,如果你考虑到关于用* 替换? 的注释,那是不正确的。最初阅读您的问题时,我没有将其视为用例。
【解决方案2】:
^\d+(?:,\d+)*$

应该可以。

开头总是有一位或多位数字,后跟任意数量的逗号分隔的一位或多位数字组。

如果您允许逗号彼此相邻,那么我认为第二个 + 应该是 *。

【讨论】:

    【解决方案3】:

    我会说正则表达式

    \d(,?\d)*
    

    应满足 1 个或多个只能用一个逗号分隔的数字。注意,1,,2 失败

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 2012-03-15
      • 1970-01-01
      相关资源
      最近更新 更多