3

我在 SO 上发现了一个类似的问题,但我无法理解。这就是我需要的;

6 位或更多位,允许使用这些字符\s\-\(\)\+

这就是我所拥有的/^[0-9\s\-\(\)\+]{6,}$/

问题是,除了数字之外,我不希望任何其他内容计入 6 个或更多量词。我怎样才能只“计算”数字?如果我可以阻止其他允许的字符被相邻输入,那也很好,例如:

0898--234 
+43 34  434

经过一个小时的阅读和查看正则表达式备忘单后,我希望有人能指出我正确的方向!

4

3 回答 3

4

你可以这样做:

/^([\s()+-]*[0-9]){6,}[\s()+-]*$/

这将匹配任意数量的特殊字符(空格、括号、加号或连字符),后跟一个十进制数字,重复 6 次或更多次,后跟任意数量的特殊字符。

或者,如果您不想匹配两个或更多相邻的特殊字符,请执行以下操作:

/^([\s()+-]?[0-9]){6,}[\s()+-]?$/
于 2013-11-19T15:05:19.530 回答
1

您可以使用前瞻:

/^(?=(\D*\d){6,})[0-9\s()+-]{6,}$/
于 2013-11-19T15:08:20.620 回答
0
/^[\s()+-]*(\d[\s()+-]*){6,}$/

这不算“粗鲁”。它允许任意数量的特殊字符,后跟六倍[一个数字后跟任意数量的特殊字符]。
如果你想要最大。数字之间的一个特殊字符,使用?*不是

/^[\s()+-]*(\d[\s()+-]?){6,}[\s()+-]*$/

这匹配任意数量的特殊字符,后跟 6 次或更多次 [一个数字后跟最多一个特殊字符],然后是任意数量的特殊字符。


另一种选择是先从字符串中去除特殊字符,然后匹配 6 个或更多数字。

var rawInput = "    12  (3) -- 4 -5 ++6";
var strippedInput = rawInput.replace(/[\s()+-]*/g, "");
return new RegExp("^\d{6,}$").test(strippedInput);

请记住,您拥有一门完整的编程语言可供使用。我注意到人们倾向于决定他们需要使用正则表达式,然后忘记他们可以做的所有其他事情。

于 2013-11-19T15:06:43.843 回答