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.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)
}
複製代碼
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))
}
複製代碼