正则表达式 - 匹配字符范围与仅匹配数字的量词

时间:2013-11-19 15:02:42

标签: javascript regex quantifiers

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

6个或更多数字,允许这些字符\s\-\(\)\+

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

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

0898--234 
+43 34  434

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

3 个答案:

答案 0 :(得分:4)

你可以这样做:

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

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

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

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

答案 1 :(得分:1)

您可以使用前瞻:

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

答案 2 :(得分: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);

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