鍍金池/ 問答/HTML5  PHP  Python  HTML/ 關(guān)于正則匹配的問題

關(guān)于正則匹配的問題

描述:給一個input框的內(nèi)容匹配一個正則,匹配內(nèi)容為產(chǎn)品激活碼。
類似這樣子:“0C31-0B81-BB32-3094-0C31-0B81-BB32-3094”

代碼:

$('#licenseCode').keyup(function () {
        let licenseCode = $(this).val();
        let reg = /^([A-Z0-9]{4}-){7}[A-Z0-9]{4}$/g;
        console.log(reg.test(licenseCode));
        console.log(reg.test(licenseCode));
        console.log(reg.test(licenseCode));
        console.log(reg.test(licenseCode));
        if (reg.test(licenseCode)) {
            checkBtn.removeAttr("disabled");
            console.log(11);
        } else {
            checkBtn.attr("disabled", "disabled");
            console.log(22);
        }
    });

輸入結(jié)果卻令我大吃一驚!

clipboard.png

一直想不通為什么會是true,false,true,false?。。?!

如果我在增加一行console.log();

$('#licenseCode').keyup(function () {
        let licenseCode = $(this).val();
        let reg = /^([A-Z0-9]{4}-){7}[A-Z0-9]{4}$/g;
        console.log(reg.test(licenseCode));
        console.log(reg.test(licenseCode));
        console.log(reg.test(licenseCode));
        console.log(reg.test(licenseCode));
        console.log(reg.test(licenseCode));
        if (reg.test(licenseCode)) {
            checkBtn.removeAttr("disabled");
            console.log(11);
        } else {
            checkBtn.attr("disabled", "disabled");
            console.log(22);
        }
    });

輸出結(jié)果會這樣子:

clipboard.png

想不通?。。?!為什么?

回答
編輯回答
雅痞

因為/g的原因

reg = /1/g
s = '1'
reg.test(s) // true
reg.test(s) // false
reg = /1/
reg.test(s) // true
reg.test(s) // true

當(dāng)設(shè)置全局標(biāo)志的正則使用test()
如果正則表達(dá)式設(shè)置了全局標(biāo)志,test() 的執(zhí)行會改變正則表達(dá)式 lastIndex屬性。連續(xù)的執(zhí)行test()方法,后續(xù)的執(zhí)行將會從 lastIndex 處開始匹配字符串,(exec() 同樣改變正則本身的 lastIndex屬性值).

參考https://developer.mozilla.org...

2017年5月13日 09:50