今天沒啥寫的,就分享個思路吧。
之前在群里討論的時候,謝亮兄弟說判斷密碼是否是純數字,純字母之類的。
如果用 if 或者 switch 寫看着確實蛋疼,如果有 7, 8 條判斷,那就老長一大段了。
這個思路是我之前看 jQuery 源碼的時候學到的,感覺用在這也不錯。
先來看代碼吧。
function test(str, re, msg) { var ret = str.match(re || /^(\d+)$|^([a-zA-Z]+)$|^([a-zA-Z].+)$|^([0-9a-zA-Z]+)$|^([\s\S]+)$/); var msg = msg || ["", "純數字", "純字母", "字母開頭+任意字符", "數字+字母任意組合", "未分類"]; var i = 0; while (ret[++i] === undefined); return msg[i]; } console.log(test("123")); console.log(test("sss")); console.log(test("123xx")); console.log(test("a123xx")); console.log(test("%$#@"));
可以看到利用一個正則和一個數組就完成了效驗。
其實思路很簡單,利用了正則的捕獲組來對應數組里的字符。
/^(\d+)$|^([a-zA-Z]+)$|^([a-zA-Z].+)$|^([0-9a-zA-Z]+)$|^([\s\S]+)$/
可以拆分為
/^(\d+)$/ 對應 "純數字" /^([a-zA-Z]+)$/ 對應 "純字母" /^([a-zA-Z].+)$/ 對應 "字母開頭+任意字符" /^([0-9a-zA-Z]+)$/ 對應 "數字+字母任意組合" /^([\s\S]+)$/ 對應 "未分類"
如果對應的捕獲組捕獲到了,對應的分組下就會有值,如果沒捕獲到就會是 undefined
所以我們直接從 1 開始遍歷結果集就可以得知是什么類型的了。
好了,今天分享就這些。