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

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("这是一个有效的手机号")
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容