我验证我的输入,如果它通过上述两个正则表达式。 我怎样才能调整这两个正则表达式,以便它接受一个列表即(如在input2和input3上)。现在我的正则表达式只适用于input1。调整正则表达式来接受几种模式
2或更高:
^\d{2}\d*$
非0:
input1: 123
input2: 123, 456
input3: 123, 456, 789
我验证我的输入,如果它通过上述两个正则表达式。 我怎样才能调整这两个正则表达式,以便它接受一个列表即(如在input2和input3上)。现在我的正则表达式只适用于input1。调整正则表达式来接受几种模式
2或更高:
^\d{2}\d*$
非0:
input1: 123
input2: 123, 456
input3: 123, 456, 789
首先,您发布的图案相当于^\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>$
改为10
。例如:
^(\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*)*$
为了验证,您可以将第一个'*'变成'+',以便字符串不能以逗号开头。尽管如此,这将使空列表无法匹配。 –
这也运行到我下面马克的回答中描述的灾难性回溯问题。如果分隔符是完全可选的,则捕获开始和结束的位置不明确。 –