CodeWars 上面的奇葩问题(二)
工作之余在codewars上看了一个问题,题目如下
好吧,我搞了半天没搞出来,各位看官,你们知道怎么解吗? 答案我参考了google,使用一条正则表达式是这样的 function validate(password) { return /^(?=.*d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{6,}$/.test(password); } 这里包含了几个基础知识点,我说明一下 /^[a-zA-Z0-9]{6,}$/
主体之外,用了三个前向断言
主体,匹配的依然是主体windows,前向断言的作用相当于一个筛选条件
我们再组合来看是不是更明白一些了? 这句的意思是我们要从开始到结束6个以上字符,他们的条件有三个,出现过数字,小写,大写 以上是普通青年解法 那这作弊来的答案,也是颇有成就感的,心想这种问题不会有其他答案了吧,但答题者的想象力再次超过了我的想象,以下是其他几种答案,供扩展思路之用 function validate(password) { return /^[A-Za-z0-9]{6,}$/.test(password) && /[A-Z]+/ .test(password) && /[a-z]+/ .test(password) && /[0-9]+/ .test(password) ; } 进行了四个正则验证,用&&相连,避免了正则内部的断言,这是文艺青年解法 下面还有铅笔青年解法,就看看 function validate(password) { // 1) if the first char is [0-9]: // a) verify what follows contains at least 1 [a-z] // b) verify what follows contains at least 1 [A-Z] // c) verify what follows contains only [0-9a-zA-Z] and at least 5 of them // 2) if the first char is [a-z]: // a) verify what follows contains at least 1 [0-9] // b) verify what follows contains at least 1 [A-Z] // c) verify what follows contains only [0-9a-zA-Z] and at least 5 of them // 3) if the first char is [A-Z]: // a) verify what follows contains at least 1 [a-z] // b) verify what follows contains at least 1 [0-9] // c) verify what follows contains only [0-9a-zA-Z] and at least 5 of them return /^(([0-9](?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z]))([0-9a-zA-z]{5,})|([a-z](?=[^0-9]*[0-9])(?=[^A-Z]*[A-Z]))([0-9a-zA-z]{5,})|([A-Z](?=[^a-z]*[a-z])(?=[^0-9]*[0-9]))([0-9a-zA-z]{5,}))$/.test(password); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |