這是一個骯髒的實現,可能會讓你使用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