【发布时间】:2011-11-22 03:02:10
【问题描述】:
我验证我的输入是否通过了上面的两个正则表达式。 如何调整两个正则表达式,使其接受一个列表,即(如在 input2 和 input3 上)。现在我的正则表达式只适用于 input1。
2 或更高:
^\d{2}\d*$
非 0:
^[1-9]\d*$
input1: 123
input2: 123, 456
input3: 123, 456, 789
【问题讨论】:
标签: regex
我验证我的输入是否通过了上面的两个正则表达式。 如何调整两个正则表达式,使其接受一个列表,即(如在 input2 和 input3 上)。现在我的正则表达式只适用于 input1。
2 或更高:
^\d{2}\d*$
非 0:
^[1-9]\d*$
input1: 123
input2: 123, 456
input3: 123, 456, 789
【问题讨论】:
标签: regex
首先,您发布的模式等同于^\d{2,}$,它要求数字有两个或多个数字。大于或等于 2 的整数的正则表达式更像 ^[+-]?0*([2-9]|[1-9]\d+)$。根据您的描述,不清楚您想要的是哪一个。
无论哪种方式,你想要使用的是这样的:
^(<pattern>(,\s|$))+$`
所以对于你的场景,它会是这样的:
^(\d{2,}(,\s|$))+$ #2 or more digits
^(0*([2-9]|[1-9]\d+)(,\s|$))+$ #positive integers >= 2
^(0*[1-9]\d*)(,\s|$))+$ #positive integers > 0
我不确定您使用的是什么风格的正则表达式,但如果您的引擎拒绝在上述模式中重复使用 $,您可以尝试类似
^(<pattern>,\s)*<pattern>$
相反。示例:
^(\d{2,},\s)*\d{,2}$ #2 or more digits, simplified
请记住,执行此操作的更好方法通常是在逗号 + 空格分隔符上拆分字符串,这将为您提供一个字符串数组,您可以尝试将其解析为整数。
【讨论】:
首先,这是我为您的基本正则表达式推荐的内容:
两位或多位数字:
\d{2,}
一位或多位数字:
\d+
现在,如果您希望它们中的任何一个匹配逗号和空格分隔的列表,您可以使用:
(?:\d{2,}(?:\s*,\s*)?)+
和
(?:\d+(?:\s*,\s*)?)+
分别
【讨论】:
试试这个:
^[1-9]\d*(?:\s*,\s*[1-9]\d*)*$
[1-9]\d* 匹配一个或多个数字,其中第一个不能为零。如果第一个数字之后还有更多字符,它们必须包含一个逗号,可选地被空格包围——\s*,\s*——后跟另一个数字。并且根据需要重复多次。
如果您愿意,您可以对格式更加严格。例如,如果逗号必须紧跟在数字后面,并且逗号后面必须正好有一个空格,则可以使用:
^[1-9]\d*(?:, [1-9]\d*)*$
【讨论】:
* 转换为+,这样字符串就不能以逗号开头。不过,这会使空列表无法匹配。