CaamDau組件庫系列:想要的iOS Swift正則表達式基本都在這裏

CD_RegEx 正則表達式擴展組件

此篇無圖

App開發中少不了正則表達式的使用,一個統一的正則表達式擴展組件是有效減小代碼量,規範項目代碼,利我利他的事情。經常使用的正則有:密碼、郵箱、手機號、名稱,度娘告訴咱們的寫法多種多樣卻不必定有效,(如:不少手機號的寫法還用上古時期的 ^13[0-9]|15[7-9]|153|156|18[7-9])[0-9]{8}$ 這簡直就是誤人子弟的事情)git

CD_RegEx 正則表達式擴展組件 包含對 NSRegularExpression 的擴展 和經常使用表達式的集合 enum CD_RegEx{},讓使用正則表達式更便捷。固然,CD_RegEx提供的集合不必定知足需求,能夠仿照 CD_RegEx 的寫法,或其餘寫法來佈局本身系統的表達式。github

幹說不練假把式!貼代碼:

  • NSRegularExpression 示例
/// NSRegularExpression 初始化
NSRegularExpression.cd_init(pattern)
or
CaamDau.makeRegEx(pattern)
複製代碼
//MARK:--- RegEx ----------
do{//驗證一個郵箱地址的格式是否正確。
    let pattern = "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$"
    let email = "dsfddf@qq.163.com"
    if (CaamDau.makeRegEx(pattern)?.cd.match(allIn: email)) != nil {
        _ = true
    }else{
        _ = false
    }
    if CaamDau.makeRegEx(pattern)!.cd.match(email) {
        _ = true
    }else{
        _ = false
    }
}

do{// 獲取第一個匹配結果
    let pattern = "([\\u4e00-\\u9fa5]+):([\\d]+)"
    let str = "張三:123456 66,99 ,個人, 李四:23457,王麻子:110987 9"
    if let text = CaamDau.makeRegEx(pattern)?.cd.match(firstIn: str) {
        //print(text.cd.range(in: str))
        text.cd.string(in: str)
        text.cd.captures(in: str)
        text.cd.captures(in: str)![0]
        text.cd.captures(in: str)![1]
    }else{
        _ = false
    }
}

do{// 獲取全部匹配結果
    let pattern = "([\\u4e00-\\u9fa5]+):([\\d]+)"
    let str = "張三:123456 66,99 ,個人, 李四:23457,王麻子:110987 9"
    if let text = CaamDau.makeRegEx(pattern)?.cd.match(allIn: str) {
        text.map{$0.cd.string(in: str)}
        text.map{$0.cd.captures(in: str)![0]}
        text.map{$0.cd.captures(in: str)![1]}
    }else{
        _ = false
    }
}

do{// ----- 字符串替換
    let pattern = "([\\u4e00-\\u9fa5]+):([\\d]+)"
    let str = "張三:123456 66,99 ,個人, 李四:23457,王麻子:110987 9"
    CaamDau.makeRegEx(pattern)!.cd.match(replaceIn: str, with: "***", count: 1)
    CaamDau.makeRegEx(pattern)!.cd.match(replaceIn: str, with: "***")
    CaamDau.makeRegEx(pattern)!.cd.match(replaceIn: str, with: "***", count: 9)
}
do{//捕獲組替換
    let pattern = "([\\u4e00-\\u9fa5]+):([\\d]+)"
    let str = "張三:123456 66,99 ,個人, 李四:23457,王麻子:110987 9"
    CaamDau.makeRegEx(pattern)!.cd.match(replaceIn: str, with: "$1的編號是$2", count: 1)
    CaamDau.makeRegEx(pattern)!.cd.match(replaceIn: str, with: "$1的編號是$2")
    CaamDau.makeRegEx(pattern)!.cd.match(replaceIn: str, with: "$1的編號是$2", count: 9)
}
複製代碼
  • CD_RegEx 示例
do{
    CD_RegEx.match("123", type: CD_RegEx.tPassword(CD_RegEx.Password.value0))
    CD_RegEx.match("123456", type: CD_RegEx.tPassword(CD_RegEx.Password.value0))
    CD_RegEx.match("a123", type: CD_RegEx.tPassword(CD_RegEx.Password.value1))
    CD_RegEx.match("a123456", type: CD_RegEx.tPassword(CD_RegEx.Password.value1))
    CD_RegEx.match("123", type: CD_RegEx.tPassword(CD_RegEx.Password.value2))
    CD_RegEx.match("123_456", type: CD_RegEx.tPassword(CD_RegEx.Password.value2))
    CD_RegEx.match("123_a456", type: CD_RegEx.tPassword(CD_RegEx.Password.value2))
    CD_RegEx.match("123_a@456", type: CD_RegEx.tPassword(CD_RegEx.Password.value2))
    // 必須包含大小寫字母和數字
    CD_RegEx.match("1234567a", type: CD_RegEx.tPassword(CD_RegEx.Password.value3("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,20}$")))
    CD_RegEx.match("1234567aA_@", type: CD_RegEx.tPassword(CD_RegEx.Password.value3("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,20}$")))
    
    CD_RegEx.match("1382828", type: CD_RegEx.tMobile(nil))
    CD_RegEx.match("13828282626", type: CD_RegEx.tMobile(nil))
    
    CD_RegEx.match("https://itunes.apple.com/cn/app/", type: CD_RegEx.tURL(nil))
    CD_RegEx.match("htt://itunes.apple.com/cn/app/", type: CD_RegEx.tURL(nil))
}
複製代碼

若是已經產生興趣,可 移步 下載或克隆倉庫 進入 Regex.playground 玩轉你的表達式測算

---------- 敬請大佬指正 ----------

相關文章
相關標籤/搜索