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

Regex - match range of characters with a quantifier that only matches numbers

本文关键字:量词 字符 范围 数字 Regex-      更新时间:2023-09-26

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

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

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

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

0898--234 
+43 34  434

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

您可以这样做:

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

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

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

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

您可以使用前瞻:

/^(?=('D*'d){6,})[0-9's()+-]{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,然后忘记他们可以做的一切