Javascript 针对特定易猜测模式的正则表达式验证
所以我完全不知道从哪里开始在我的React应用程序中创建正则表达式验证模式 我有各种输入框,其中(取决于某些标准)将有3、4、5或6位密码(屏幕上呈现的相同数量的输入框每个接受1个数字) 单击sJavascript 针对特定易猜测模式的正则表达式验证,javascript,regex,reactjs,validation,Javascript,Regex,Reactjs,Validation,所以我完全不知道从哪里开始在我的React应用程序中创建正则表达式验证模式 我有各种输入框,其中(取决于某些标准)将有3、4、5或6位密码(屏幕上呈现的相同数量的输入框每个接受1个数字) 单击sSave或Continue按钮后,各个输入存储在一个数组中,然后将join合并为一个数字。这是我必须验证的最后一个数字 我需要做的是在React中编写一个验证方法,它执行以下验证: 对于3位数字: 不能是999、998或在第一个数字(911、611等)后立即包含11 对于4位数字: 不能是9999、999
Save
或Continue
按钮后,各个输入存储在一个数组中,然后将join
合并为一个数字。这是我必须验证的最后一个数字
我需要做的是在React中编写一个验证方法,它执行以下验证:
对于3位数字:
不能是999、998或在第一个数字(911、611等)后立即包含11
对于4位数字:
不能是9999、9998或在第一个数字(8112、5112等)后立即包含11
对于5位数字:
不能是999999、99998,或在第一个数字(71122、41122等)后立即包含11
对于6位数字:
不能是9999999、999998,也不能在第一个数字(611222、311222等)后立即包含11
这样做让我很痛苦,但我确实缺乏正则表达式空间,并且不确定如何着手实现这样的东西
还应该注意的是,我没有使用Redux或它附带的验证。必须使用接受参数(从输入框中检索到的最终数字)并针对该参数运行验证(如果出现故障,则显示错误消息)的util方法来攻击此参数
有没有人可以提供一些关于如何开始使用RegEx
提前谢谢 正如我在您的问题下方的评论中所述,您可以使用以下正则表达式: 工作原理:
在行首断言位置^
负前瞻确保以下任一选项不继续(?!9+[98]$|\d1{2})
匹配9+[98]$
一次或多次,然后是9
或9
,然后是行尾8
匹配任何数字,后跟\d1{2})
两次1
在3到6位之间匹配\d{3,6}
在行尾断言位置$
\d1{2}
匹配011
,111
,211
,…,911
而不是1211
或其他
代码如下:
s=['999'、'998'、'911'、'611'、'9999'、'9998'、'8112'、'5112'、'99999'、'99998'、'71122'、'41122'、'999999'、'99998'、'99998'、'611122'、'123'、'6211'、'99989'、'121212']
r=/^(?9+[98]$|\d1{2})\d{3,6}$/
适用于(x/s){
console.log(x.match(r)?x+':真:x+':假)
}
正如我在您问题下方的评论中所说,您可以使用以下正则表达式:
工作原理:
在行首断言位置^
负前瞻确保以下任一选项不继续(?!9+[98]$|\d1{2})
匹配9+[98]$
一次或多次,然后是9
或9
,然后是行尾8
匹配任何数字,后跟\d1{2})
两次1
在3到6位之间匹配\d{3,6}
在行尾断言位置$
\d1{2}
匹配011
,111
,211
,…,911
而不是1211
或其他
代码如下:
s=['999'、'998'、'911'、'611'、'9999'、'9998'、'8112'、'5112'、'99999'、'99998'、'71122'、'41122'、'999999'、'99998'、'99998'、'611122'、'123'、'6211'、'99989'、'121212']
r=/^(?9+[98]$|\d1{2})\d{3,6}$/
适用于(x/s){
console.log(x.match(r)?x+':真:x+':假)
}
^(?9+[98]$\d1{2})\d{3,6}$
天哪!太快了!你应该把它写下来作为一个答案,这样我就可以接受它了,因为它似乎满足了我的需要…^(?!9+[98]$$\d1{2})\d{3,6}$
天哪!太快了!你应该把它写下来作为一个答案,这样我就可以接受它,因为它似乎满足了我的需要…谢谢你解释所有这些!我在您的代码片段中看到—运行后—数字99989返回为true
,但这是不允许的,因此它应该返回为失败(false
),任何不允许的数字组合都会使整个验证失败。因此,即使6位数字以999开头,也会立即导致故障。这有意义吗?你能更清楚地定义规则吗?根据你的例子,只有数字是9的一次或多次,然后是9或8。此后,我将相应地更改我的答案。例如,如果用户要输入6位扩展名,如果在该6位数字中的任何位置发现999
(或任何其他不允许的模式),则验证应失败。这里有999
失败(这是正确的),但是99989
通过了,它不应该通过,因为999
的模式在99989
中找到,因此它应该自动失败。希望能把它清理干净…那么[01]?\d11
对这种情况有效(可选0
或1
,然后是任意数字,然后是11
)?感谢您的解释!我在您的代码片段中看到—运行之后—编号99989来自bac
^(?!9+[98]$|\d1{2})\d{3,6}$