所以我完全不知道从哪里开始在我的React应用程序中创建RegEx验证模式。
我有各种输入框,其中( 取决于某些条件 )将有一个3、4、5或6位密码( 并且在屏幕上呈现的相同数量的输入框都将接受1个数字 )。
单击s Save或Continue按钮后,单个输入存储在一个数组中,然后joined为一个数字。这是我必须验证的最终数字。
Save
Continue
join
我需要做的是 在React中 编写一个验证方法 , 该方法执行以下验证:
3位数字:
不能为999、998,也不能在第一个数字( 911、611等 )后立即包含11 。
4位数字:
不能为9999、9998,也不能在第一位数字( 8112、5112等 )后立即包含11 。
5位数字:
不能为 99999、99998,也不能 在第一位数字( 71122、41122等 )后立即包含11 。
对于6位数字:
不能为999999、999998,也不能在第一位数字( 611222、311222等 )之后立即包含11 。
这样做让我很痛苦,但是我确实在RegEx领域很缺乏,并且不确定如何实现这样的东西。
还应注意,我没有使用 Redux 或它附带的验证。用接受实参( 从输入框检索到的最终数字) 的util方法来攻击这个对象,并对它运行验证( 如果失败则显示错误信息 )。
是否有人可以提供有关RegEx入门的一些见解…?
提前致谢!
就像我在您的问题下方的评论中一样,您可以使用以下正则表达式:
查看正则表达式在这里使用
^(?!9+[98]$|\d1{2})\d{3,6}$
这个怎么运作:
^
(?!9+[98]$|\d1{2})
9+[98]$
9
8
\d1{2})
1
\d{3,6}
$
由于负先行跟随线锚的开始,我们还要确保在该位置先行启动,这就是为什么\d1{2}比赛011,111,211,…,911而不是1211或他人。
\d1{2}
011
111
211
911
1211
代码如下:
s = ['999','998','911','611','9999','9998','8112','5112','99999','99998','71122','41122','999999','999998','611222','311222','123','6211','99989','121212'] r = /^(?!9+[98]$|\d1{2})\d{3,6}$/ for (x of s) { console.log(x.match(r) ? x + ': true' : x + ': false') }
-
OP提到了这一点,999并将其998放置在字符串中的任何位置均应使其无效:
999
998
^(?!\d*9{2}[98]|\d1{2})\d{3,6}$
除负先行中的第一个选项外,与上述相同的正则表达式。现在是\d*9{2}[98],匹配999或998字符串中的任意位置(以任意数字开头)。
\d*9{2}[98]
s = ['999','998','911','611','9999','9998','8112','5112','99999','99998','71122','41122','999999','999998','611222','311222','123','6211','99989','121212'] r = /^(?!\d*9{2}[98]|\d1{2})\d{3,6}$/ for (x of s) { console.log(x.match(r) ? x + ': true' : x + ': false') }
OP指出的格式0N11应无效(而不仅仅是N11):
0N11
N11
^(?!\d*9{2}[98]|[01]?\d1{2})\d{3,6}$
与上述相同的正则表达式,除了负前瞻中的第二个选项。这是现在[01]?\d1{2},匹配0或1可选的,其次是任何数字,然后11(所以011,111,211,…, ,911,0011,,0111 ,…, ,,, ,…, )。0211``0311``0911``1011``1111``1211``1911
[01]?\d1{2}
0
11
0011
0111
0211``0311``0911``1011``1111``1211``1911
s = ['999','998','911','611','9999','9998','8112','5112','99999','99998','71122','41122','999999','999998','611222','311222','123','6211','99989','121212'] r = /^(?!\d*9{2}[98]|[01]?\d1{2})\d{3,6}$/ for (x of s) { console.log(x.match(r) ? x + ': true' : x + ': false') }