如何检查整个字符串是否可以与正则表达式匹配?在Java中是方法String.matches(regex)
String.matches(regex)
您需要结合使用锚^(字符串锚的开始)和$字符串锚的结束,并range(of:options:range:locale:)通过以下.regularExpression选项进行操作:
^
$
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将模式锚定在字符串的开头,您可以省略^,但仍然$需要锚定在字符串末尾:
[.regularExpression, .anchored]
.anchored
let result = phoneNumber.range(of: "\\d{3}-\\d{3}-\\d{3}$", options: [.regularExpression, .anchored]) != nil
观看在线Swift演示
另外,在此处使用NSPredicatewith MATCHES是一种替代方法:
NSPredicate
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")