Regex-用只匹配数字的量词匹配字符范围



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

6位或6位以上的数字,允许使用这些字符s-()+

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

问题是,除了数字之外,我不希望其他任何东西计入6或更多的量词。我怎么能只"数"数字?如果我能阻止其他允许的字符相邻输入,那也很好,例如:

0898--234 
+43 34  434

经过一个小时的阅读和查看regex备忘单,我希望有好心人能为我指明正确的方向!

您可以这样做:

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

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

或者,如果你不想匹配两个或多个相邻的特殊字符:

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

您可以使用前瞻:

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

这不包括"cruft"。它允许任意数量的特殊字符,后跟六次[一个数字后跟任意数量的特定字符]
如果你想在数字之间最多有一个特殊字符,可以使用?而不是*,但我认为你不太喜欢在开头或结尾有一个以上的特殊字符,所以我会使用

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

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


另一种选择是先从字符串中去掉特殊字符,然后与6位或6位以上的数字进行匹配。

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

请记住,您有一个完整的编程语言可供使用。我注意到人们倾向于决定他们需要使用regex,然后忘记他们可以做的一切

相关内容

  • 没有找到相关文章

最新更新