首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在数据库中查找重复的地址,阻止用户提前输入吗?

在数据库中查找重复的地址,阻止用户提前输入吗?
EN

Stack Overflow用户
提问于 2008-09-01 07:30:48
回答 15查看 5.9K关注 0票数 16

我如何在数据库中找到重复的地址,或者最好在填写表单时阻止人们?我想越早越好?

有没有什么好的方法来提取街道,邮政编码等,这样就可以检测到打字错误和简单的获取2注册的尝试?像这样:

代码语言:javascript
运行
复制
Quellenstrasse 66/11 
Quellenstr. 66a-11

我说的是德国地址..。谢谢!

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2008-09-01 09:05:25

Johannes:

@PConroy:这也是我最初的想法。其中有趣的部分是为地址的不同部分找到好的转换规则!有什么好的建议吗?

当我们之前在这类项目上工作时,我们的方法是利用现有的地址语料库(150k左右),然后对我们的域名应用最常见的转换(爱尔兰,所以"Dr"->"Drive","Rd"->"Road“等)。恐怕当时没有关于这类事情的全面的在线资源,所以我们基本上自己做了一个列表,检查电话簿之类的东西(在那里按下空间,地址以各种方式缩写!)。正如我前面提到的,您将会惊讶地发现,只需添加几个常见规则,就可以检测到多少“重复项”!

我最近偶然发现了一个页面,里面有一个相当全面的list of address abbreviations,尽管它是美国英语,所以我不确定它在德国有多有用!谷歌很快就找到了几个网站,但它们看起来像是垃圾新闻通讯的注册陷阱。虽然那是我用英语搜索的,所以你可能会更多地看看德语中的“德语地址缩写”:)

票数 4
EN

Stack Overflow用户

发布于 2008-09-01 07:58:59

您可以使用Google GeoCode API

这实际上给出了你的两个例子的结果,只是尝试一下。这样,您就可以获得结构化的结果,并将其保存在数据库中。如果查找失败,请要求用户以另一种方式写入地址。

票数 10
EN

Stack Overflow用户

发布于 2008-09-01 07:52:43

越早阻止人们,从长远来看就越容易!

由于不太熟悉您的数据库模式或数据输入表单,我建议使用下面这样的方法:

  • 在您的数据库中为每个地址“部分”提供了不同的字段,例如街道、城市、邮政编码、Länder等。
  • 具有类似的数据输入表单,例如街道、城市等

上面的理由是,每个部分都可能有自己的特殊“规则”,用于检查略微更改的地址("Quellenstrasse"->"Quellenstr.","66/11"->"66a-11“),因此您的验证代码可以检查每个字段的值是否存在于其各自的db字段中。如果没有,您可以让一个类对每个给定字段应用转换规则(例如,将"strasse“词根转换为"str"),并再次检查重复项。

显然,上面的方法有它的缺点:

  • 它可能会很慢,这取决于你的数据集,让用户等待
  • 用户可能会试图通过将地址“部分”放在错误的字段中(将邮政编码附加到城市等)来绕过它。但根据经验,我们发现,即使引入像上面这样的简单检查,也会阻止很大比例的用户输入预先存在的地址。

一旦你有了基本的检查,你就可以考虑优化所需的数据库访问,完善规则等,以满足你的特定模式。您还可以查看MySQL's match() function来处理类似的文本。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档