小编典典

确保正则表达式与Swift正则表达式匹配整个字符串

swift

如何检查整个字符串是否可以与正则表达式匹配?在Java中是方法String.matches(regex)


阅读 250

收藏
2020-07-07

共1个答案

小编典典

您需要结合使用锚^(字符串锚的开始)和$字符串锚的结束,并range(of:options:range:locale:)通过以下.regularExpression选项进行操作:

import Foundation

let phoneNumber = "123-456-789"
let result = phoneNumber.range(of: "^\\d{3}-\\d{3}-\\d{3}$", options: .regularExpression) != nil
print(result)

或者,您可以传递一个选项数组[.regularExpression, .anchored],其中仅.anchored将模式锚定在字符串的开头,您可以省略^,但仍然$需要锚定在字符串末尾:

let result = phoneNumber.range(of: "\\d{3}-\\d{3}-\\d{3}$", options: [.regularExpression, .anchored]) != nil

观看在线Swift演示

另外,在此处使用NSPredicatewith
MATCHES是一种替代方法:

根据ICU v3,使用正则表达式样式的比较,左手表达式等于右手表达式(有关更多详细信息,请参阅《 ICU
正则表达式用户指南》)。

MATCHES 实际上将正则表达式匹配锚定在字符串的开头和结尾请注意,这可能不适用于所有Swift 3版本 ):

let pattern = "\\d{3}-\\d{3}-\\d{3}"
let predicate = NSPredicate(format: "self MATCHES [c] %@", pattern)
let result = predicate.evaluate(with: "123-456-789")
2020-07-07