3

我正在尝试使用下一个模式生成正则表达式。一个数字,最多 16 位数字,里面可以有也可以没有逗号,从不在开头,从不在结尾。我试过这个:

^(?:\d+(?:,{1}\d+){1})$

问题是我无法计算组 {0,16} 的结果。这是应该适合表达式的数字列表:

123,34
1,33333333
1222222233

不适合的示例数字:

1111,1111,1111,11111
11111,11111111111111111111111111111,111111111111111

超过16个字符)

4

2 回答 2

1

您可以在此之前检查长度或使用^(?=[\d,]{1,16}$)(?:\d+(?:,\d+)?)$

这是在进行真正匹配之前检查长度的前瞻。

于 2013-01-25T11:34:19.660 回答
0

如果你的正则表达式支持前瞻断言,你可以使用这个:

^(?!(?:\d{17,}$|[,\d]{18,}$))(?:\d+(?:,\d+)?)$

在 Regexr 上查看

我删除了多余{1}的部分,并使带有分数的组成为可选的。

否定的前瞻断言(?!(?:\d{17,}$|[,\d]{18,}$))正在检查您的长度要求。如果它找到 17 位或更多位直到结尾或 18 位或更多位和逗号直到结尾,它会失败。我在这里允许字符类中的多个逗号不是问题,以下模式确保只有一个逗号。

于 2013-01-25T11:33:23.080 回答