Javascript偏序号码匹配

时间:2012-09-01 12:27:59

标签: javascript regex

我正在尝试在JS中创建部分RegEx匹配。我想要实现的是当用户在输入字段中输入内容时,JS将始终按键按下数字序列,而不仅仅是在满足整个RegEx匹配时。

所以,这是RegEx规则:

^[12][^1-6]\d{2}$

当用户输入数字1或2时,这是正确匹配,但3不正确。接下来,当未输入1到6之间的数字时,这也是正确的,最后任何2个下一个数字都是正确的。正如我所说,现在只有在输入所有4个数字时才能完成RegEx匹配。

如何实现部分输入检查?

2 个答案:

答案 0 :(得分:2)

嗯,最简单的解决方案是将可选组件包装到相应的(?:)?构造中。实际上你有两个可选组件,所以你需要考虑到这一点。

结果看起来像......

^[12](?:[^1-6]\d{0,2})?$

...因为你必须匹配'2x','2x1'和'2x​​11',似乎。因此{0,2}量词。

问题显然是你无法使用单个正则表达式来检查用户是否已完成在你的字段中输入一些值 - 或者不是。换句话说,如果您希望“中间”1匹配,但结果1不匹配,那么,使用单个正则表达式检查是不可能的。 )

答案 1 :(得分:1)

你可以“或”你的正则表达式,但这意味着重复:

^([12]|[12][^1-6]|[12][^1-6]\d{2})$

要解决这个问题:

^      From the start of the string / line
       match either
[12]   The numbers 1 or 2
|      or
[12]   The numbers 1 or 2
       followed by
[^1-6] Any character which is not the numbers 1 through 6
|      or
[12]   The numbers 1 or 2
       followed by
[^1-6] Any character which is not the numbers 1 through 6
       followed by
\d     Any number
{2}    repeated two times
$      followed by the end of the string / line

这将匹配以下任何一项:

1
2
1N
2N
1NXX
2NXX

N是指不是数字1到6的任何内容,而X是任何数字。

注意:如果您真的只想匹配正则表达式第二部分中的数字0和7-9,只需将[^1-6]更改为[07-9]