如何检查WHOLE字符串是否可以匹配正则表达式?在Java中是方法String.matches(regex)
您正在寻找的是range(of:options:range:locale:)
然后您可以将范围(of:option :)的结果与整个比较字符串范围进行比较.
例:
let phoneNumber = "(999) 555-1111"
let wholeRange = phoneNumber.startIndex..<phoneNumber.endIndex
if let match = phoneNumber.range(of: "\\(?\\d{3}\\)?\\s\\d{3}-\\d{4}", options: .regularExpression), wholeRange == match {
print("Valid number")
}
else {
print("Invalid number")
}
//Valid number
Run Code Online (Sandbox Code Playgroud)
编辑:您还可以使用NSPredicate
和比较您的字符串与其evaluate(with:)
方法.
let pattern = "^\\(?\\d{3}\\)?\\s\\d{3}-\\d{4}$"
let predicate = NSPredicate(format: "self MATCHES [c] %@", pattern)
if predicate.evaluate(with: "(888) 555-1111") {
print("Valid")
}
else {
print("Invalid")
}
Run Code Online (Sandbox Code Playgroud)
您需要使用锚点,^
(字符串锚点的开始)和$
(字符串锚点的结尾)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)
Run Code Online (Sandbox Code Playgroud)
或者,您可以传递一个选项数组[.regularExpression, .anchored]
,其中.anchored
将仅将模式锚定在字符串的开头,并且您可以省略^
,但仍然$
需要锚定在字符串的末尾:
let result = phoneNumber.range(of: "\\d{3}-\\d{3}-\\d{3}$", options: [.regularExpression, .anchored]) != nil
Run Code Online (Sandbox Code Playgroud)
此外,在这里使用NSPredicate
withMATCHES
是另一种选择:
左手表达式等于右手表达式,根据 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")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4626 次 |
最近记录: |