swift目前还没有在语言层面上支持正则表达式,但不排除使用正则表达式的可能,所以本篇学习如果通过自定义操作符并结合枚举来封装一个处理正则表达式的工具。
1.创建RegexHelper结构体:
struct RegexHelper {
let regex: NSRegularExpression
init(_ pattern: String) throws {
try regex = NSRegularExpression(pattern:pattern,options: .caseInsensitive)
}
func match(_ input: String) -> Bool {
let matches = regex.matchesInString(input,options: [],range: NSMakeRange(0, input.utf16.count))
return matches.count > 0
}
}
2.创建操作符=~:
precedencegroup MatchPrecedence {
associativity: none
higherThan: DefaultPrecedence
}
infix operator =~: MatchPrecedence
func =~(lhs: String, rhs: RegularPattern) -> Bool {
do {
return try RegexHelper(rhs.rawValue).match(lhs)
} catch _ {
return false
}
}
3.创建正则表达式枚举:
//MARK: 定义表达式枚举
public enum RegularPattern: String {
//邮箱
case eMail = "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$"
//手机号
case Mobile = "^1[3|4|5|7|8][0-9]\\d{8}$"
//身份证号
case IDNum = "\\d{14}[[0-9],0-9xX]"
}
4.测试使用:
if "18811880000" =~ RegularPattern.Mobile{
print("这是一个有效的手机号")
}
网友评论