成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

CodeWars 上面的奇葩問題(二)

TANKING / 3205人閱讀

工作之余在codewars上看了一個問題,題目如下

  

寫一個正則,驗證密碼,保證以下幾點,
0.位數(shù)大于六
1.必須包含小寫字母
2.必須包含大寫字母
3.必須包含數(shù)字

好吧,我搞了半天沒搞出來,各位看官,你們知道怎么解嗎?

答案我參考了google,使用一條正則表達式是這樣的

function validate(password) {
  return /^(?=.*d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{6,}$/.test(password);
}

這里包含了幾個基礎(chǔ)知識點,我說明一下
正則的主體是這個

/^[a-zA-Z0-9]{6,}$/

^,$代表從頭開始到結(jié)尾,量詞指示從頭到尾六次以上,匹配的內(nèi)容是大小寫加數(shù)字

主體之外,用了三個前向斷言
我們先來看一下前向斷言的應(yīng)用

  

"Windows (?=95|98|NT|2000)" 匹配“Windows 2000”中的“Windows”,但不匹配“Windows
3.1”中的“Windows”

主體,匹配的依然是主體windows,前向斷言的作用相當(dāng)于一個篩選條件
所以,我們這里匹配的還是主體里那六個以上的字符,只是加了三個條件
三個什么條件?

(?=.*d)(?=.*[a-z])(?=.*[A-Z])

.*任意字符出現(xiàn)0或多次后面跟d數(shù)字,意思是只有要數(shù)字,甭管他前面有或沒有任意字符,有幾個任意字符,我們都要。
同理后面的小寫,大寫。
而且這三個斷言相當(dāng)于“并”的關(guān)系。

我們再組合來看是不是更明白一些了?
^(?=.*d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{6,}$

這句的意思是我們要從開始到結(jié)束6個以上字符,他們的條件有三個,出現(xiàn)過數(shù)字,小寫,大寫

以上是普通青年解法

那這作弊來的答案,也是頗有成就感的,心想這種問題不會有其他答案了吧,但答題者的想象力再次超過了我的想象,以下是其他幾種答案,供擴展思路之用

function validate(password) {
  return  /^[A-Za-z0-9]{6,}$/.test(password) &&
          /[A-Z]+/           .test(password) &&
          /[a-z]+/           .test(password) &&
          /[0-9]+/           .test(password) ;
}

進行了四個正則驗證,用&&相連,避免了正則內(nèi)部的斷言,這是文藝青年解法

下面還有鉛筆青年解法,就看看

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/87574.html

相關(guān)文章

  • CodeWars 面的奇葩問題和回答(一)

    摘要:其實昨天晚上我看到最逗得一段代碼是這樣的,老外的創(chuàng)造力真是震古爍今啊,題目是寫一個函數(shù)查找素數(shù)。 這兩天有點迷Codewars , 這上面的好處是獎勵系統(tǒng),我為了升段位晚上像打游戲升級一樣的在做js習(xí)題,想想老外哪怕這簡單網(wǎng)站的任務(wù)系統(tǒng)做的可真夠好啊。 先給大家介紹第一道 六段題(一共8kyu,kyu上面還有dan,數(shù)字越小越難) 題目: 創(chuàng)造一個函數(shù),返回如下這么個玩意,參數(shù)...

    gggggggbong 評論0 收藏0
  • [到codewars打怪獸]利潤是怎樣煉成的

    摘要:利潤是怎樣煉成的怪獸的屬性怪獸的技能大木博士的圖鑒你是趙老爺家的算帳二狗子,趙家老爺想要學(xué)習(xí)一些理財知識,就去詢問孔乙己。 [7 kyu]Money, Money, Money 利潤是怎樣煉成的??2016.03.15 怪獸的屬性: showImg(http://ww2.sinaimg.cn/large/006m2mhTgw1f1xxc38fbqj30qa0s2q6f.jpg);sho...

    zhangyucha0 評論0 收藏0
  • 入坑codewars

    摘要:,黑色的主題風(fēng)格,很符合。時間復(fù)雜度雖然成功,但我明顯感覺代碼寫得不是很優(yōu)雅。這個是沒錯的,但缺乏了宏觀的視角,會變得片面。但是不重要,關(guān)鍵是這個思想要學(xué)習(xí),可以應(yīng)用到其他地方。求和,大于就返回偶數(shù)的位置,否則返回奇數(shù)的位置。 前幾天做LeetCode上的大數(shù)乘法,代碼沒錯,可就是提交不成功,顯示SyntaxError: Unexpected token var我把所有代碼都注釋掉,只...

    sherlock221 評論0 收藏0
  • codewars的一道題目學(xué)習(xí)ES6的Map

    摘要:我對數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)最近在上做了一道題目,嗯,我這個渣渣沒有做出來,然后看了別人的解決方案,是時候?qū)W習(xí)一下的了。。。。。讀取對應(yīng)的鍵值,如果找不到返回鍵是函數(shù)返回一個布爾值,表示某個鍵是否在數(shù)據(jù)結(jié)構(gòu)中。 我對ES6數(shù)據(jù)結(jié)構(gòu)Map的學(xué)習(xí) 最近在CodeWars上做了一道題目,嗯,我這個渣渣沒有做出來,然后看了別人的解決方案,Map??? 是時候?qū)W習(xí)一下ES6的Map了。。。。。 以下是原題...

    IamDLY 評論0 收藏0
  • [到codewars打怪獸]進制加農(nóng)炮

    摘要:二進制加農(nóng)炮問題描述驗證方式題目理解把兩個數(shù)的和轉(zhuǎn)換成二進制并以字符串的形式輸出。和當(dāng)前位數(shù)數(shù)的大小來決定。優(yōu)解使用了的添加了檢測輸入的參數(shù)合理否。通過執(zhí)行取余除二取反來實現(xiàn)知識點二進制如何轉(zhuǎn)十進制,十進制如何轉(zhuǎn)二進制 [7 kyu]Binary Addition 二進制加農(nóng)炮??2016.03.11 問題描述: showImg(http://ww3.sinaimg.cn/large/...

    caikeal 評論0 收藏0

發(fā)表評論

0條評論

TANKING

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<