【发布时间】:2016-07-19 11:35:33
【问题描述】:
我想在 sqlite db 中进行电话号码搜索。电话表有一个数字字段,其中包含一个字符串值(例如:+1 (2-34)56-78 )。
如果用户输入搜索文本为“234”,那么我需要使用NSPredicate 获取仅包含数字的电话号码(消除存储的字符串中的所有其他字母或特殊字符)并将其与输入的字符串进行比较。我应该在获取请求中使用谓词吗?
我尝试了以下谓词,但它没有返回预期的结果:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"contactName != null AND SUBQUERY(phoneList, $phone, ANY $phone.number CONTAINS[c] %@).@count > 0",searchText];
有什么办法可以做到这一点吗?我可以为此使用带有NSPredicate 的正则表达式吗?
【问题讨论】:
-
电话有一个号码还是号码是一对多的关系?
-
电话表有两个字段:号码和标签。一个联系人可以有多个电话号码。所以这里的“phoneList”是联系人与电话表的多重关系。我正在尝试使用搜索字符串作为电话号码来获取联系人。
-
SUBQUERY 和 ANY 都在处理一对多关系。尝试格式
"contactName != null AND ANY phoneList.number CONTAINS[c] %@", searchText。 -
谢谢。我纠正了它。但是这样做并没有在结果列表中显示带有特殊字符的电话号码。我需要从列值中删除特殊字符并仅与数字进行比较。
-
您可以使用
MATCHES和正则表达式。