逗号分隔数字正则表达式

58

我正在尝试验证一个包含1-8数字的逗号分隔列表。

例如,2,4,6,8,1是有效的输入。

我尝试了[0-8,]*,但它似乎接受1234作为有效值。它不要求逗号,并且让我输入一个大于8的数字。 我不确定原因所在。


1
逗号需要放在字符类的外面,并使用括号将数字字符分组。即:([0-8],)+ - Asad Saeeduddin
你说你想要1-8的数字,但是你的正则表达式正在尝试匹配0-8。到底是哪一个? - Cairnarvon
1-8 only nothing high than 8 - Nick LaMarca
仅回答您的问题,如果它接受1234作为有效输入,则同样会接受abcd,因为它们都没有匹配项,这是您使用*所要求的。 - jdavid_1385
6个回答

71

[0-8,]*将匹配您字符串中任何位置零个或多个连续的08,。你需要更像这样的东西:

^[1-8](,[1-8])*$

^ 匹配字符串的开头,$ 匹配字符串的结尾,确保你检查了整个字符串。它会匹配一个数字,以及在它后面的逗号加数字的零个或多个实例。


1
如果我尝试检查值1234、1345、4455,它将会出错。 - Ankit Vishwakarma
14
在更一般的情况下,^[0-9]+(,[0-9]+)*$(因为标题 - Comma Separated Numbers Regex - 比 OP 在问题正文中描述的要广泛) 。 - Wiktor Stribiżew
1
在更一般的情况下,您可以使用 ^\d+(,\d+)*$,因为 \d 表示“数字”,或者在十进制中表示 [0-9] - chharvey
@chharvey \d在一些正则表达式引擎(如POSIX)中不受支持,因此在只有一个regex标签的问题上,使用[0-9]更为安全。这就是为什么我在我的答案中没有使用非捕获组的原因。 - Wiktor Stribiżew

33
/^\d+(,\d+)*$/
  • 至少包含一个数字,否则将接受1、2、3、4

1
OP 正在尝试验证一个由逗号分隔的数字列表,这些数字从 0 到 8(包括 0 和 8)之间,而不是任意数量的数字。 - Paul
14
但实际上它回答了“标题”问题,这也是我在这里的原因。 - zzapper
主题的变化:接受每个数字周围的可选空格(包括第一个数字之前和最后一个数字之后),例如 1,22, 3 , 4444 , 5,则正则表达式为 ^\s*\d+\s*(,\s*\d+\s*)*$。如果您的用户倾向于在逗号后添加空格,这将非常有用。 - undefined

10
[0-9]+(,[0-9]+)+

对于一般的逗号分隔数字,例如:1,234,933,我更倾向于使用这种方法。


1
如果您正在使用Python并希望通过正则表达式查找所有可能的匹配字符串,例如XX,XX,XXX或X,XX,XXX或12,000,1,20,000。
string = "I spent 1,20,000 on new project "
re.findall(r'(\b[1-8]*(,[0-9]*[0-9])+\b)', string, re.IGNORECASE)
Result will be --->  [('1,20,000', ',000')]

1
您可以尝试使用这个正则表达式:

^[1-8](,[1-8])+$

0
你需要一个可以重复的数字加逗号组合:
 ^[1-8](,[1-8])*$

如果您不想记住括号,请在括号中添加?:,如下所示:

 ^[1-8](?:,[1-8])*$

使用此表达式,21、22、24、343546是有效的。最高数字只能为8。 - Nick LaMarca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接