【问题标题】:How to make `NSPredicate` to ignore a some characters in searching如何使`NSPredicate`在搜索中忽略某些字符
【发布时间】:2018-05-09 13:07:09
【问题描述】:

考试:

我在核心数据id属性中存储了V«003»文本。

如果我将003V003 传递给NSPredicate,它应该会批准搜索,但由于«» 字符,NSFetchRequest 找不到该字段。

如何忽略NSPredicate 中的«» 字符?

Regular Expression 有没有 NSPredicate 的方式?

【问题讨论】:

  • 您可以从此链接找到答案。 stackoverflow.com/questions/34320433/…
  • 在搜索前删除不需要的字符。 Check out this question.
  • @Khushbu,这不是答案。因为NSFetchedResultsController我不能使用两步过滤。
  • @the4kman,我在 coredata 中的存储数据中有坏字符,我不应该因为我的搜索而更改存储的数据。

标签: swift core-data nspredicate


【解决方案1】:

使用正则表达式非常简单,问号表示可选字符。

let pattern = "V«?003»?"
NSPredicate(format: "id MATCHES %@", pattern)

编辑: 为了修复用户输入,我在每个用户输入字符之间添加了«?»?

func generatePattern(item: String) -> String {
    var str = ""
    for st in item {
        str.append(contentsOf: "«?»?")
        str.append(st)
    }
    str.append(contentsOf: "«?»?")
    return String(str)
}

【讨论】:

  • 我只有V003 用户输入的字符,而V 字符不是静态的。无法生成模式!对吗?
  • 如果V 不是静态的但003 是然后使用"\\w«?003»?"\\w 是一个任意的字母数字字符。或者,如果您想将其限制为大写字母,请使用 "[A-Z]«?003»?"
  • 由于糟糕的后端设计,我认为最好在每个字符之间放置«?»?。顺便说一句,感谢您的新解决方案。 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多