限制regex中的字符总数

gjmwrych  于 2023-10-22  发布在  其他
关注(0)|答案(3)|浏览(112)

字符串可以是一个数字或一组数字,也可以是两组数字,用“-"分隔,但所有字符的总数不能超过6个。
有效字符串的示例

5
55-33
4444-1
1-4444
666666

无效字符串示例

-3
6666-
5555-6666

我的正则表达式

/^\d+(-?\d+)?$/

但是这个正则表达式将5555-6666解释为有效字符串,尽管它的长度超过6个字符。
我试着跟着

/^(\d+(-?\d+)?){1,6}$/

但是,然后我意识到它将封闭的字符集解释为一个组,它期望从1到6。
那么,如何控制字符的总数,只是一个正则表达式和上述要求?

d6kp6zgx

d6kp6zgx1#

  • 方法一:-*

你能做的最简单的事情就是在正则表达式之前测试长度(我更喜欢使用这种方法,它检查长度,然后使用正则表达式)

str.length < 7 && /^\d+(-?\d+)?$/.test(str)
  • 方法二:-*

您可以使用正向前瞻

^(?=.{0,6}$)\d+(-?\d+)?$

Regex Demo

yk9xbfzb

yk9xbfzb2#

您可以使用正向前瞻模式来确保最多可以有6个字符:

^(?=.{1,6}$)\d+(?:-\d+)?$

演示:https://regex101.com/r/kAxuZp/1
或者,你可以使用一个负的lookahead模式来确保字符串不以破折号开头,另一个负的lookahead模式来确保字符串不包含两个破折号:

^(?!-)(?!.*-.*-)[\d-]{0,5}\d$

演示:https://regex101.com/r/kAxuZp/3

jv2fixgn

jv2fixgn3#

一种选择是使用当前的正则表达式模式,并检查输入的长度,同时删除破折号:

var input = "4444-1";
if (/^\d+(-?\d+)?$/.test(input) && input.replace("-", "").length <= 6) {
    console.log("MATCH");
}
else {
    console.log("NO MATCH");
}

请注意,检查输入的长度只有在 * 删除了破折号 * 之后才真正有意义,因为只有这样我们才能Assert实际数字的总数。

相关问题