SwiftBlogSwift学习Swift编程

【实践】使用自定义操作符处理正则表达式

2017-03-27  本文已影响20人  SmartisanBool

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("这是一个有效的手机号")
}
上一篇下一篇

猜你喜欢

热点阅读