【问题标题】:Match Phone Numbers Regardless of Formatting无论格式如何,都匹配电话号码
【发布时间】:2013-04-16 15:55:56
【问题描述】:

我为 Mongo 编写了一个查询来搜索电话号码。问题是电话条目是String 而不是Number。起初我认为它工作正常,但现在我意识到如果查询格式不正确,它将不匹配。

所以我想我的问题是无论格式如何,匹配电话号码的最简单方法是什么?

最坏的情况我使用 $where 语句并通过从两个值中删除数字并对其进行正则表达式匹配来检查相等性。只是想知道是否有更优化的方法来做到这一点?

【问题讨论】:

  • /.+/ 将匹配所有电话号码。
  • 空电话号码除外
  • 啊但是如果电话号码是空的,那真的是电话号码吗?如果你的灵魂是空的,你真的是一个人吗?
  • /\D*\d{3}\D*\d{3}\D*\d{4}\D*/ 类似的东西?或者你的意思是你有一个特定的电话号码,并且你试图在一个混乱的领域匹配它?
  • 基本上我想要一种方法来获取逻辑电话号码搜索查询并使其匹配非统一电话字段。早在它被存储但它被输入的那一天,现在我们有一个输入这些电话号码的统一格式。举例来说,如果我们有人打电话给两年前在系统中的人,则无论其存储格式如何,搜索都应该得到他们的结果。

标签: javascript regex mongodb


【解决方案1】:

我首先将规范化的电话号码(例如,去除非数字字符,或以标准格式格式化)存储在数据库中,因为它们尚未规范化,因此为每个搜索请求即时执行会很昂贵,所以如果你还没有太多条目(例如,如果这仍然在开发中),一个脚本将在一个镜头中标准化所有条目(或者如果你有一个作品,则在非偷窥时间分几批系统)将是可能的。

然后你的 where 子句只会规范化输入,然后搜索会容易得多。

顺便说一句,地址也是如此,您必须对数据进行规范化以执行良好的搜索,或者您必须开发一些模糊匹配算法,这只会变得更慢。 (并且可能比您想象的要花更多的时间)

【讨论】:

  • 我绝对同意你的观点,他们应该被存储为一个标准化的数字。我需要在模式中编写一些设置器,以确保在保存所有非数字时从条目中删除。所以我假设唯一有效的方法是将其转换为 Number?
  • 无论是数字还是规范化字符串(例如,找到一个好的国际电话号码格式,并在保存号码和搜索号码时强制输入)
  • 好的,谢谢。我在另一条评论中提到了这一点,我们目前正在以某种格式存储所有条目,以前该功能以输入方式存储电话号码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 2011-09-22
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 2022-01-05
相关资源
最近更新 更多