JavaScript正則學習筆記

皮皮儫發表於2020-11-22

RegExp

元字元
  • ' . ' 點號:匹配任意的字元

  • ^ $ 位置字元

    • ^ 匹配字串開始的位置
    • $ 匹配字串結束的位置
  • 匹配數字和非數字 \d 和 \D

  • 匹配空白字元 \s 和 \S

    • \s 匹配空白字元
    • \S 匹配非空白字元
  • 中文 unicode 碼 的區間 [\u4e00-\u9fa5]

  • [] 匹配裡面的任意字元

  • [^a-z] 匹配除a到z之外的所有字元

  • `+` 匹配一次或者 多次 (所約束的條件必須存在,不然無法匹配)

  • var reg = /[mM][jJ]+/g
    //可以這樣寫 
    var reg = /[m][j]+/gi
    // 是匹配的時候不區分大小寫
    
  • `*` 匹配 0 次或者 多次 (真正意義 上的可有可無)

    • 加號和星號的區別
  • `?` 匹配重複的一次或者是零次 ( 所受約束的條件可有至多為一次,可無為零次)

  • 原子組 ()

    • 捕獲的方法: RegExp.$1 $2 $3
    • 有多少個組,就可以使用$num來獲取第幾組所匹配的字串
  • | 或者

  • `?:` 分組匹配不捕獲

正向預查

?= 無正向肯定預查 表示肯定是元 ,但不匹配

  • ?! 元 正向否定預查 表示肯定不是元,不匹配 **
    !

  • ? <= ¥ 反向肯定預查 表示肯定是¥ ,但不匹配**

  • ?<! ¥ 反向否定 預查 表示肯定不是¥,不匹配**

重複類 /[\d]{0,12}/g 大括號內表示的是所匹配的的長度,(也就是所匹配的字元的重複次數)

正則例項物件的方法

test()
  • 返回一個布林值,表示當前模式是否能匹配引數字串
reg.exec(str)
  • 用來返回匹配的結果,如果發現匹配,就返回一個陣列,陣列中的成員都是匹配的子字串,否則返回null

字串方法

  • match()
    • 對字串進行正則匹配,返回匹配的結果
  • search()
    • 返回第一個滿足條件的匹配結果在整個字串中的位置,如果沒有任何匹配,則返回-1
  • replace()
    • 可以替換匹配的值,它接受兩個引數,第一個是正規表示式,表示搜尋模式,第二個是替換的內容

驗證使用者賬號

驗證手機號碼

function checkPhone(phone){
    var reg = /^1[3|5|6|7|8|9|]\d{9}$/g;
    if(reg.test(phone)){
        console.log(`此 ${phone} 手機號碼格式正確`)
    }else{
        console.log(`此 ${phone} 手機號碼格式錯誤`)
    }
}

console.log('手機號碼驗證')
checkPhone('12312312312')
checkPhone('16677777   ')
checkPhone('166777770000')
checkPhone('17775646924')
console.log('\n\n座機號碼驗證')
function checkTelPhone(phone){
    var reg = /^0\d{2,3}-?\d{7,8}/g;
    if(reg.test(phone)){
        console.log(`此 ${phone} 座機號碼格式正確`)
    }else{
        console.log(`此 ${phone} 座機號碼格式錯誤`)
    }
}
checkTelPhone("0108888888")
checkTelPhone("01088888889")
checkTelPhone("0108-8888889")
checkTelPhone("01088-888889")
checkTelPhone("1088-888889")
checkTelPhone("088-8888811")
checkTelPhone("088-888889")

// 匹配身份證號
// 18 位或者15位,15位全是數字 18位 前17都是數字,最後一位可能是數字或者字元x或X
function checkId(id){
    var reg = /(^\d{15}$)|(^\d{17}[x|\d]$)/gi;
    console.log(reg.test(id)? "正確":"錯誤");
}
checkId('123456789012345678')
checkId('12345678901234567x')
checkId('12345678901234567X')
checkId('123456789012345')
console.log("---------")
checkId('12345678901234')
checkId('1234567890123456789')
checkId('12345678901234567a')

        //匹配郵箱
        // 第一部分@ 第二部分 .com | cn | net
        function checkEmail(email){
            var reg  = /^\w+@\w+\.(com|cn|net|cc)$/gi;
            console.log(reg.test(email) ? "郵箱格式正確":"郵箱格式錯誤");
        }
        checkEmail("pphboy@qq.com")
        checkEmail("pphboy@123.com")
        checkEmail("pphboy@123com")
        checkEmail("pphboy123.com")

相關文章