js筆記十四之Math和字符串方法應用

案例分析

  • 字符串

獲取地址欄中URL地址問號傳遞的參數(shù)值
https://www.baidu.com/s?wd=javascript&rsv_spt=1&issp=1

目標: 把問號傳遞的參數(shù)值分別的解析出來
obj={wd:'javascript',rsv_spt:1,issp:1}

var str = "https://www.baidu.com/s?wd=javascript&rsv_spt=1&issp=1";
// -> 目標: {wd:'javascript',rsv_spt:1,issp:1}

// -> 方案一: 
var questionIndex = str.indexOf('?');
str = str.substring(questionIndex + 1) // -> "wd=javascript&rsv_spt=1&issp=1"
var ary = str.split('&') // -> ["wd=javascript", "rsv_spt=1", "issp=1"]
var obj = {};
for(var i=0;i<ary.length;i++){
    var cur = ary[i],
    // console.log(cur)
        curAry = cur.split("="),
        key = curAry[0],
        value = curAry[1];
        obj[key] = value;
}
console.log(obj)  // -> {wd: "javascript", rsv_spt: "1", issp: "1"}
var str = "https://www.baidu.com/s?wd=javascript&rsv_spt=1&issp=1";
// -> 目標: {wd:'javascript',rsv_spt:1,issp:1}

// -> 方案二: 
function  queryURLParameter(url){
    // -> 傳遞的參數(shù)(我們當前要解析的url地址) 
    var questionIndex = url.indexOf('?'),
        obj = {};
    if(questionIndex === -1){
        // -> url中沒有問號傳參: 直接返回空對象
        return obj;
    }
    url = url.substring(questionIndex+1),
        ary = url.split("&");
    for(var i=0;i<ary.length;i++){
        var curAry = ary[i].split('=');
        obj[curAry[0]] = curAry[1];
    }
    return obj;
}
console.log(queryURLParameter("https://www.baidu.com/s?wd=javascript&rsv_spt=1&issp=1"))
// -> {wd: "javascript", rsv_spt: "1", issp: "1"}

console.log(queryURLParameter("https://www.baidu.com/s?wd=node&rsv_spt=1&issp=1"))
// -> {wd: "node", rsv_spt: "1", issp: "1"}

console.log(queryURLParameter("https://www.baidu.com/s?wd=前端"))
// -> {wd: "前端"}
var str = "https://www.baidu.com/s?wd=javascript&rsv_spt=1&issp=1";
// -> 目標: {wd:'javascript',rsv_spt:1,issp:1}

// -> 方案三: 
String.prototype.myQueryURLParameter = function myQueryURLParameter(){
    var obj = {},
        reg = /([^?&=]+)=([^?&=]+)/g;
    this.replace(reg,function(){
        var arg = arguments;
        obj[arg[1]] = arg[2];
    });
    return obj;
} 
console.log(str.myQueryURLParameter())
  • Math及字符串

隨機驗證碼

真實項目中的驗證碼:

  • 真實項目中驗證碼一般都是后臺處理的,后臺返回給客戶端展示的是一個圖片(圖片中包含了驗證碼)

驗證碼形式:

  1. 數(shù)字字母
  2. 問答
  3. 圖片選擇
  4. 文字順序
  5. 拖拽

HTML/CSS

<style type="text/css">
    #codeBox{width: 300px;height: 50px;line-height: 50px;font-size: 28px;text-align: center;border: 2px solid #ddd;margin: 200px auto;user-select: none;}
</style>
<div id="codeBox">qwer</div>

JavaScript

// 簡單實現(xiàn)
var codeBox = document.getElementById("codeBox");
var areaStr = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
var result = "";
for(var i=0;i<4;i++){
    // 隨機獲取一個0-61之間的隨機整數(shù): 作為接下來獲取字符的索引
    var ran = Math.round(Math.random()*61);
    // -> 根據(jù)索引獲取一個隨機字符
    var str1 = areaStr.charAt(ran)
    // -> 把每一次循環(huán)獲取的字符存放在最后結(jié)果中
    result += str1
}
codeBox.innerHTML = result
// 點擊切換
var codeBox = document.getElementById('codeBox');
function getCode(){
    var result = '',
        areaStr = '0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM';
    for (var i = 0; i < 4; i++) {
        var ran = Math.round(Math.random()*61);
        result += areaStr.charAt(ran);
    }
    codeBox.innerHTML = result;
}

// -> 加載頁面是需要執(zhí)行一次這個方法: 生成四位驗證碼
getCode();
// -> 點擊盒子重新生成驗證碼(此處不加小括號,這塊只是再把函數(shù)綁定給點擊事件)
codeBox.onclick = getCode;

// 四位不重復的驗證碼
var codeBox = document.getElementById("codeBox");
function getCode(){
    var result = "",
        str = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
    for (var i = 0; i < 4; i++) {
        var ran = Math.round(Math.random()*61),
            cur = str.charAt(ran);
            // -> 驗證一下新獲取的char字符是否已經(jīng)在 result 中存在了
            // -> 如果存在了我們不存儲,重新再獲取一遍,反之才累加到 result 中
            if (result.indexOf(cur)>-1) {
                i--;
                continue;
            }
        result += cur;
    }
    codeBox.innerHTML = result;
}
getCode()
codeBox.onclick = getCode;
// 四位大小寫不重復的驗證碼
var codeBox = document.getElementById("codeBox");
function getCode(){
    var result = "",
        str = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
    for (var i = 0; i < 4; i++) {
        var ran = Math.round(Math.random()*61),
            cur = str.charAt(ran);
            // -> 驗證一下新獲取的char字符是否已經(jīng)在 result 中存在了
            // -> 如果存在了我們不存儲,重新再獲取一遍,反之才累加到 result 中
            if (result.toUpperCase().indexOf(cur.toUpperCase())>-1) {
                i--;
                continue;
            }
        result += cur;
    }
    codeBox.innerHTML = result;
}
getCode()
codeBox.onclick = getCode;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市庵楷,隨后出現(xiàn)的幾起案子罢艾,更是在濱河造成了極大的恐慌,老刑警劉巖尽纽,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咐蚯,死亡現(xiàn)場離奇詭異,居然都是意外死亡弄贿,警方通過查閱死者的電腦和手機春锋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來差凹,“玉大人期奔,你說我怎么就攤上這事∥D颍” “怎么了呐萌?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谊娇。 經(jīng)常有香客問我搁胆,道長,這世上最難降的妖魔是什么邮绿? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮攀例,結(jié)果婚禮上船逮,老公的妹妹穿的比我還像新娘。我一直安慰自己粤铭,他們只是感情好挖胃,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著梆惯,像睡著了一般酱鸭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垛吗,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天凹髓,我揣著相機與錄音,去河邊找鬼怯屉。 笑死蔚舀,一個胖子當著我的面吹牛饵沧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赌躺,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼狼牺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了礼患?” 一聲冷哼從身側(cè)響起是钥,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缅叠,沒想到半個月后悄泥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡痪署,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年码泞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狼犯。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡余寥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悯森,到底是詐尸還是另有隱情宋舷,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布瓢姻,位于F島的核電站祝蝠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏幻碱。R本人自食惡果不足惜绎狭,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望褥傍。 院中可真熱鬧儡嘶,春花似錦、人聲如沸恍风。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朋贬。三九已至凯楔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锦募,已是汗流浹背摆屯。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留御滩,地道東北人鸥拧。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓党远,卻偏偏與公主長得像,于是被迫代替她去往敵國和親富弦。 傳聞我的和親對象是個殘疾皇子沟娱,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容