栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

特定易猜模式的RegEx验证

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

特定易猜模式的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')}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/608885.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号