我正在尝试在 JS 中创建部分正则表达式匹配。我想要实现的是,当用户在输入字段中输入内容时,JS 总是会在按键时对数字序列进行部分匹配,而不仅仅是在完成整个 RegEx 匹配时。
所以,这就是 RegEx 规则:
^[12][^1-6]\d{2}$
当用户输入数字 1 或 2 时,这是正确的匹配,但 3 是不正确的。接下来,如果没有输入1到6之间的数字,那也是正确的,最后任意2个数字都是正确的。正如我所说,现在正则表达式匹配只有在输入所有 4 个数字时才完成。
如何实现部分输入检查?
我正在尝试在 JS 中创建部分正则表达式匹配。我想要实现的是,当用户在输入字段中输入内容时,JS 总是会在按键时对数字序列进行部分匹配,而不仅仅是在完成整个 RegEx 匹配时。
所以,这就是 RegEx 规则:
^[12][^1-6]\d{2}$
当用户输入数字 1 或 2 时,这是正确的匹配,但 3 是不正确的。接下来,如果没有输入1到6之间的数字,那也是正确的,最后任意2个数字都是正确的。正如我所说,现在正则表达式匹配只有在输入所有 4 个数字时才完成。
如何实现部分输入检查?
嗯,最简单的解决方案是将可选组件包装到相应的(?:)?构造中。您实际上有两个可选组件,因此您需要考虑到这一点。
结果看起来像......
^[12](?:[^1-6]\d{0,2})?$
...因为您必须同时匹配“2x”、“2x1”和“2x11”,看来。) 因此{0,2}是量词。
问题显然是您不能使用单个正则表达式来检查用户是否已在您的字段中输入了一些值 - 或没有。换句话说,如果您希望“中间”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].