凡是有需要用戶填寫(xiě)表單的地方重窟,都需要正則表達(dá)式做個(gè)前置驗(yàn)證
用戶的輸入永遠(yuǎn)是不安全的
前端的過(guò)濾只能阻擋90%「粗心」的用戶巡扇,而剩下10%的「惡意」用戶還需要后端再次做一次驗(yàn)證來(lái)阻擋
題目1: \d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^,$分別是什么?
\d :匹配一位數(shù)字
\w :匹配字母數(shù)字或者下劃線或漢字等
\s :匹配任意的空白符(全乖坠、半角空格知给,Tab描姚,換行符)
[a-zA-Z0-9] :等同于\w
\b :是正則表達(dá)式規(guī)定的一個(gè)特殊代碼轩勘,代表著單詞的開(kāi)頭或結(jié)尾怯邪、單詞的分界處,只匹配一個(gè)位置澄步,不匹配單詞分隔符中的任何一個(gè)
. :匹配除了換行符以外的任意字符
* :匹配的不是字符和泌,不是位置,而是數(shù)量梯皿,任意數(shù)量的不包含換行的字符东羹。重復(fù)0次或者更多次
+ :重復(fù)一次或者更多次
? :0次或者1次
x{3} :匹配3次x
^ :匹配字符串的開(kāi)始,,忠烛,如果在中括號(hào)內(nèi),是取反的意思
$ :匹配字符串的結(jié)束
題目2: 寫(xiě)一個(gè)函數(shù)trim(str)冤议,去除字符串兩邊的空白字符
function trim(str) {
var newStr = str.replace(/(^\s+)|(\s+$)/g,'');
return newStr;
}
var arr = trim(' jirengu');
console.log(arr);
題目3: 寫(xiě)一個(gè)函數(shù)isEmail(str)师坎,判斷用戶輸入的是不是郵箱
function isEmail(str){
var regEmail = /\w+@[0-9a-zA-Z]+([\.][a-zA-Z0-9])+/;
return regEmail.test(str);
}
題目4: 寫(xiě)一個(gè)函數(shù)isPhoneNum(str)屹耐,判斷用戶輸入的是不是手機(jī)號(hào)
function isPhoneNum(str) {
var regPhoneNum = /^1\d{10}/;
return regPhoneNum.test(str);
}
題目5: 寫(xiě)一個(gè)函數(shù)isValidUsername(str)惶岭,判斷用戶輸入的是不是合法的用戶名(長(zhǎng)度6-20個(gè)字符犯眠,只能包括字母、數(shù)字鸯旁、下劃線)
function isValidUsername(str) {
var reg = /^\w{6,20}$/;
return reg.test(str);
}
題目6: 寫(xiě)一個(gè)函數(shù)isValidPassword(str), 判斷用戶輸入的是不是合法密碼(長(zhǎng)度6-20個(gè)字符噪矛,只包括大寫(xiě)字母艇挨、小寫(xiě)字母韭赘、數(shù)字、下劃線脉漏,且至少至少包括兩種)
function isValidPassword(str) {
if(!/^\w{6,20}$/.test(str)) return false;
if(/^\d{6,20}$/.test(str)) return false;
if(/^[a-z]{6,20}$/.test(str)) return false;
if(/^[A-Z]{6,20}$/.test(str)) return false;
return true;
}
var arr = isValidPassword('_azA12345678');
console.log(arr);
題目7: 寫(xiě)一個(gè)正則表達(dá)式袖牙,得到如下字符串里所有的顏色
var re = /*正則...*/
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee "
console.log( subj.match(re) ) // ['#121212', '#AA00ef']
var re = /#[0-9a-zA-Z]{3}|#[0-9a-zA-Z]{6}(?=;)/g;
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee "
console.log( subj.match(re) ); // ['#121212', '#AA00ef']
題目8: 下面代碼輸出什么? 為什么? 改寫(xiě)代碼鞭达,讓其輸出[""hunger"", ""world""].
var str = 'hello "hunger" , hello "world"';
var pat = /".*"/g;
str.match(pat);
輸出// [""hunger" , hello "world""]
默認(rèn)是貪婪匹配模式
var str = 'hello "hunger" , hello "world"';
var pat = /".*?"/g;//在量詞*后面加?將其改為非貪婪模式
console.log(str.match(pat));