5

到目前为止,我一直在使用一个功能来验证电子邮件格式和密码

func isRegexValid(string:String,regex:String) -> Bool {
   return NSPredicate(format: "SELF MATCHES %@", regex).evaluate(with: string)
}

我试图检查某种模式并遇到了问题。我正在寻找一个带有 4 个逗号分隔符的字符串,后跟“ext”

^(.*,){4}ext 

上述函数无法按预期处理此问题,因此我尝试了一种效果很好的替代方法

func isRegexValid2(string:String,pattern:String) -> Bool {
  let regex = try! NSRegularExpression(pattern: pattern, options: [])
  return regex.firstMatch(in: string, options: [], range: NSMakeRange(0, string.utf16.count)) != nil
}

我想了解两个正则表达式调用之间的区别以及我们是否应该避免其中一个。

4

1 回答 1

4

NSPredicate 与 NSRegularExpression 非常不同。

NSPredicate 用于在 Cocoa 对象中进行搜索和过滤。它的主要目的是在对象集合中过滤某些对象。它具有完全不同的语法。

正如 NSPredicate 的 Apple 文档中所述

谓词表示逻辑条件,可用于过滤对象集合。

如需进一步学习,您可以查看Predicate 编程指南。

另一方面,NSRegularExpression 是一个用于编译正则表达式的类,然后将其应用于 unicode 字符串。

NSRegularExpression 类支持定义在http://userguide.icu-project.org/strings/regexp的标准 ICU 正则表达式

希望这可以澄清。

于 2018-05-21T09:12:07.347 回答