特定易猜模式的RegEx验证

特定易猜模式的RegEx验证,第1张

特定易猜模式的RegEx验证

就像我在您的问题下方的评论中一样,您可以使用以下正则表达式:

查看正则表达式在这里使用

^(?!9+[98]$|d1{2})d{3,6}$

这个怎么运作:

  • ^
    在行首声明位置
  • (?!9+[98]$|d1{2})
    否定前瞻,确保不会继续执行以下任一选项
    • 9+[98]$
      匹配
      9
      一个或更多次,然后或者
      9
      8
      ,则该行的末尾
    • d1{2})
      匹配任何数字,后跟
      1
      两次
  • d{3,6}
    匹配3到6位数字
  • $
    在行尾断言位置

由于负先行跟随线锚的开始,我们还要确保在该位置先行启动,这就是为什么

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
放置在字符串中的任何位置均应使其无效:

查看正则表达式在这里使用

^(?!d*9{2}[98]|d1{2})d{3,6}$

除负先行中的第一个选项外,与上述相同的正则表达式。现在是

d*9{2}[98]
,匹配
999
998
字符串中的任意位置(以任意数字开头)。

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')}

-

编辑#2

OP指出的格式

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


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')}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5615018.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存