我在 SO 上发现了一个类似的问题,但我无法理解。这就是我需要的;
6 位或更多位,允许使用这些字符\s\-\(\)\+
这就是我所拥有的/^[0-9\s\-\(\)\+]{6,}$/
问题是,除了数字之外,我不希望任何其他内容计入 6 个或更多量词。我怎样才能只“计算”数字?如果我可以阻止其他允许的字符被相邻输入,那也很好,例如:
0898--234
+43 34 434
经过一个小时的阅读和查看正则表达式备忘单后,我希望有人能指出我正确的方向!
我在 SO 上发现了一个类似的问题,但我无法理解。这就是我需要的;
6 位或更多位,允许使用这些字符\s\-\(\)\+
这就是我所拥有的/^[0-9\s\-\(\)\+]{6,}$/
问题是,除了数字之外,我不希望任何其他内容计入 6 个或更多量词。我怎样才能只“计算”数字?如果我可以阻止其他允许的字符被相邻输入,那也很好,例如:
0898--234
+43 34 434
经过一个小时的阅读和查看正则表达式备忘单后,我希望有人能指出我正确的方向!
你可以这样做:
/^([\s()+-]*[0-9]){6,}[\s()+-]*$/
这将匹配任意数量的特殊字符(空格、括号、加号或连字符),后跟一个十进制数字,重复 6 次或更多次,后跟任意数量的特殊字符。
或者,如果您不想匹配两个或更多相邻的特殊字符,请执行以下操作:
/^([\s()+-]?[0-9]){6,}[\s()+-]?$/
您可以使用前瞻:
/^(?=(\D*\d){6,})[0-9\s()+-]{6,}$/
/^[\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);
请记住,您拥有一门完整的编程语言可供使用。我注意到人们倾向于决定他们需要使用正则表达式,然后忘记他们可以做的所有其他事情。