美文网首页SwiftBlogSwift学习Swift编程
【实践】使用自定义操作符处理正则表达式

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

作者: SmartisanBool | 来源:发表于2017-03-27 12:43 被阅读20次

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

    相关文章

      网友评论

        本文标题:【实践】使用自定义操作符处理正则表达式

        本文链接:https://www.haomeiwen.com/subject/apxrottx.html