我在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,然后忘记他们可以做的一切