正则表达式的应用,在每一种编程语言里面是必备的功能,swift也是逃不掉的.今天主要是怎么入手使用正则表达式,然后基本的应用,且定义一个操作符,来进行快速判断,类似与javascript中的test方法.
在swift中通过NSRegularExpression,构建一个实例,然后调用matchesInString来做字符串的判断.下面我们来做一个简单的手机号判断.
matchesInString方法中最后一个参数是决定是否在整个字符串中进行匹配,最后如果匹配找到则返回比0大的数字,否则就没匹配到.
var error:NSError? let pattern = "[0-9]{11}" let phone = "19999999999" let regx = NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.CaseInsensitive, error: &error)! let match = regx.matchesInString(phone,options:nil,range:NSMakeRange(0,count(phone)))
下一步,我们通过infix关键字来简化这一个步骤,首先我们创建一个正则类Regex,里面重要的代码就是上面的代码的改变
//正则匹配 class Regex{ let internalExpression:NSRegularExpression let pattern:String init(pattern:String){ self.pattern = pattern var error:NSError? self.internalExpression = NSRegularExpression(pattern: self.pattern, options: NSRegularExpressionOptions.CaseInsensitive, error: &error)! } func test(input:String)->Bool { let matches = self.internalExpression.matchesInString(input, options: nil, range: NSMakeRange(0,count(input))) return matches.count > 0 } }
然后我们通过infix来定义一个操作符,且定义其位一个函数
//定义操作符 infix operator =~ {} func =~(input:String,pattern:String) -> Bool{ return Regex(pattern: pattern).test(input) }
这样之后我们就可以通过 =~ 这个操作符来做判断了
if "18888888888" =~ "[0-9]{11}" { println("匹配正确") }
这种方式来处理正则匹配是非常方便的,希望能帮助到!