NSPredicate SELF MATCHES 不适用于简单的包含正则表达式

问题描述 投票:0回答:2

如果我的字符串包含

NSPredicate
短语,我只需要使用
evaluate
.page.link
模式进行检查。

extension String {
    func isValid(for string: String) -> Bool {
        NSPredicate(format: "SELF MATCHES %@", string).evaluate(with: self)
    }
}

let pattern = ".page.link" // "\\.page\\.link"

"joyone.page.link/abcd?title=abcd".isValid(for: pattern) //false
"joyone.page.link".isValid(for: pattern) //false
"joyone.nopage.link/abcd?title=abcd".isValid(for: pattern) //false

我知道有一种更简单的方法可以做到这一点,但它是更大的东西的一部分,我的模式只是枚举中的案例。

前两个应该是

true
.

ios swift nspredicate
2个回答
1
投票

MATCHES
总是考虑整个字符串。

range(of:options:)
也会说话
Regex
而且更容易使用

extension String {
    func isValid(for pattern: String) -> Bool {
        range(of: pattern, options: .regularExpression) != nil
    }
}

0
投票

当然@vadian的回答很正确,值得推荐,但是这里的解决方法是:

let pattern = "^.{1,}\\.page\\.link.{1,}$"

感谢它考虑整个字符串的评论。

© www.soinside.com 2019 - 2024. All rights reserved.