逗号分隔的整数

3
什么是最适合用于以逗号分隔的整数的正则表达式?它也可以在逗号之间包含空格,并且该字段不是必需的,这意味着它可以为空。
123,98549
43446

etc..


2
必须引用JWZ的话:“有些人遇到问题时,会想‘我知道了,我来用正则表达式解决它。’现在他们有两个问题了。” - R Samuel Klatchko
@Microspino:逗号是人们在尝试让正则表达式工作时陷入的状态。 - Jonathan Leffler
4个回答

7
这是一个非常基础的内容,可能适合您:

这是一个非常基础的内容,可能适合您:

/^[\d\s,]*$/

只要字符串仅包含数字、空格和逗号,它就会匹配。这意味着"123 456"将通过,但我不知道这是否有问题。

/^\s*(\d+(\s*,\s*\d+)*)?\s*$/

这个有以下结果:
""                true
"123"             true
"123, 456"        true
"123,456  , 789"  true
"123 456"         false
"   "             true
"  123   "        true
", 123 ,"         false

解释:

/^\s*(\d+(\s*,\s*\d+)*)?\s*$/
 1 2 3 4 5 6 7 8  9  a b c d

1. ^   Matches the start of the string
2. \s  Matches a space  * means any number of the previous thing
3. (   Opens a group
4. \d  Matches a number. + means one or more of the previous thing
5. (   Another group
6. \s* 0 or more spaces
7. ,   A comma
8. \s* 0 or more spaces
9. \d+ 1 or more numbers
a. *   0 or more of the previous thing. In this case, the group starting with #5
b. ?   Means 0 or 1 of the previous thing. This one is the group at #3
c. \s* 0 or more spaces
d. $   Matches the end of the string

非常好的结果集。你用什么工具来获取这些?谢谢! - eKek0
@eKek0 - 我刚刚在Firebug中输入了它们。 - nickf
谢谢,它完美地运行了。现在我需要仔细阅读你的代码来理解原因。再次感谢。 - Frenchi In LA

2
假设您需要一个整数列表:(\d+) 逗号和空格不应该是问题,因为您只需要遍历组即可。

我认为他想要验证一个输入。 - nickf
抱歉,我可能没有清楚地表达我的问题,我想验证像“12, 3455”或“4456,888, 23343”等表达式。您的解决方案只接受数字。无论如何感谢您的回复。 - Frenchi In LA

1

我不知道你指的这个字段是什么

这个字段不是必需的,也就是说它可以为空

除此之外,我认为这应该可以工作

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

你需要检查字符串的开头和结尾。这个例子对于“123,hello”返回true。 - nickf

0

这个问题应该更加明确:例如,您是否接受数字之间的空格?您是否接受逗号在开头/结尾?您是否接受逗号前面的空格?您是否接受几个连续的空格?您是否接受开头/结尾的空格?

我会假设最有可能的情况,即您不接受数字之间的空格,不接受逗号在开头/结尾,但您接受逗号前后的空格,接受几个连续的空格,并且接受开头/结尾的空格。

/^ *([0-9]+( *, *[0-9]+)*)? *$/
  • "" : true
  • "     " : true
  • "123" : true
  • "123,45" : true
  • "123 ,45, 67" : true
  • "   123" : true
  • "1  2   3" : false
  • ",45" : false
  • "123," : false

编写用于匹配由分隔符“S”分隔的元素列表“E”的正则表达式时,关键是您肯定必须两次编写“E”匹配器(这里只是“[0-9]+”)。

  • 模式的原则是E(SE)*
  • E是“[0-9]+”:仅为数字序列
  • S是“*,*”(注意空格):逗号及其前后的可选空格

此时我们有:

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

我们对其进行了改进,因此它还可以接受开头/结尾的空格、仅包含空格的字符串和空字符串:
/^ *([0-9]+( *, *[0-9]+)*)? *$/

请注意,我个人更喜欢使用 [0-9] 而不是 \d,我认为这样更易于阅读。


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