这是一个肮脏的实现,可能会让你使用Levenshtein distance
一些简单的检查。信贷“levenshteinenator”去this link
。您可以将想要的任何常用域添加到域数组,并检查输入电子邮件主机部分的距离是1还是2,如果在某处存在拼写错误,该距离可能会相当接近。
levenshteinenator = function(a, b) {
var cost;
// get values
var m = a.length;
var n = b.length;
// make sure a.length >= b.length to use O(min(n,m)) space, whatever that is
if (m < n) {
var c=a;a=b;b=c;
var o=m;m=n;n=o;
}
var r = new Array();
r[0] = new Array();
for (var c = 0; c < n+1; c++) {
r[0][c] = c;
}
for (var i = 1; i < m+1; i++) {
r[i] = new Array();
r[i][0] = i;
for (var j = 1; j < n+1; j++) {
cost = (a.charAt(i-1) == b.charAt(j-1))? 0: 1;
r[i][j] = minimator(r[i-1][j]+1,r[i][j-1]+1,r[i-1][j-1]+cost);
}
}
return r[m][n];
}
// return the smallest of the three values passed in
minimator = function(x,y,z) {
if (x < y && x < z) return x;
if (y < x && y < z) return y;
return z;
}
var domains = new Array('yahoo.com','google.com','hotmail.com');
var email = '[email protected]';
var parts = email.split('@');
var dist;
for(var x=0; x < domains.length; x++) {
dist = levenshteinenator(domains[x], parts[1]);
if(dist == 1 || dist == 2) {
alert('did you mean ' + domains[x] + '?');
}
}
似乎有点过度“联系我们的形式”,不是吗? – 2009-01-20 03:57:24
@Daniel,一个简单的soundex函数可以在少于20行的代码中完成。但是,最“全部”的东西是“联系我们”的形式。 :) – Stefan 2009-01-20 04:01:29
嗯,我想这是在告诉我所有的“联系我们”表格都是mailto:links ... – 2009-01-20 04:05:56