0

我的PhoneNos表上有电话号码列表

ID | PhoneNo
1 | +61 2 9666 8000 

我们尝试在我们的内容表中搜索这个电话号码(即 desc 字段)

挑战实际上是:

desc 字段是文本,输入可以是任何内容,例如:

ContentID | Desc    
1 | bla bla ... +61 (02) 9666 8000 ... bla bla
2 | bla bla ... +61-2-9666-8000 bla bla
3 | bla bla ... +61 2 96668000 bla bla
4 | bla bla ... +61296668000 00116129668000 bla bla

或者可以是从额外间距安排的任何东西,例如

5 | bla bla ... +61  (02) 9666   8000 ... bla bla
6 | bla bla ... +61-2 9662 0382 ... bla bla

那是澳大利亚的电话号码,但它可能是美国或任何其他国家/地区,因此与 1 个特定国家/地区并不紧密。

这款手机没有任何图案,之前和之后这款手机都没有。所以它可以是任何东西。

反正有没有容易处理这种事情?我可能可以在上面构建每个条件,但我只是想知道是否有更好的解决方案。

4

3 回答 3

2

只需将用户输入标准化为易于搜索的格式,即“+ [ x ]”。如果用户输入额外的空格,请将其删除。如有必要,添加国家代码。从开头删除 00 并替换为 +。您甚至可以将“电话号码”分成三列,以便于搜索。

于 2012-10-26T05:21:27.627 回答
1

为什么不直接从电话号码中删除特殊符号并将它们存储为数字字符串?

您需要考虑的唯一情况是 +,因为它替换了 00。

所以基本上,你的记录只有数字,你的输入只有数字。只需确保将数据库和输入中的 + 标准化为某事。

我要做的是将它们全部存储为 00 而不是 +,这样当输入带有 00 的搜索输入通过时,它会起作用,以及带有 + 的搜索。希望这是有道理的。

于 2012-10-26T03:02:16.873 回答
1

我(高度未受过教育)的想法是使用正则表达式替换(参见此处)。基本上去掉内容中的所有内容,除了数字和加号(感觉很笨拙吗?:)),然后用相同的处理(\\+\d+基本上)与您的控制字符串进行比较。这做出了相当广泛的假设,即不会有另一个随机数字/字符与您的数字匹配的字符串产生误报(我认为从概率的角度来看不太可能,但总是有可能)。

我正在修补我确信是非常低效、不优雅且可能不正确的解决方案,并意识到它无法处理带有前导0内括号的情况(因为这似乎不存在于其他模式中)。如果您好奇,可以在这里找到它,但我认为正则表达式解决方案可能是最有效的处理方式。

于 2012-10-26T05:10:17.097 回答