正则表达式允许空格且不计入字符数:如何让[\d ]{6}匹配指定内容
解决正则表达式允许空格但不计入字符配额的问题
嘿,这个需求我太熟悉了——[\d ]{6}确实满足不了,因为它会把空格也算进那6个字符的配额里。要实现「任意空格可忽略,只要求总共6个数字」的匹配,我们可以用下面的正则表达式:
^(?:\s*\d){6}\s*$
拆解一下这个正则的逻辑:
^和$:锚定字符串的开头和结尾,确保我们匹配的是整个字符串,不会出现部分匹配的情况(比如避免匹配到更长字符串里的一段符合条件的子串)(?:\s*\d):这是一个非捕获组,意思是「任意数量的空格(包括0个),后面跟一个数字」{6}:让前面的非捕获组重复6次,这样就保证了总共会匹配到6个数字,数字之间可以插任意多的空格- 首尾的
\s*:允许字符串的开头和结尾出现空格(如果不需要首尾空格,直接去掉这两个\s*就行)
测试你给出的例子:
这个正则可以完美匹配以下所有情况:
1 234561 2 34561 2 3 4561 2 3 4 561 2 3 4 5 6
甚至连首尾带空格的1 2 3 4 5 6也能匹配上,非常灵活。
如果你的场景里只允许数字之间有单个空格,也可以把\s*改成\s?,不过看你的需求应该是允许任意数量的空格,所以\s*更合适。
内容的提问来源于stack exchange,提问作者Daniel Costa
相关产品推荐
相关产品推荐

