当前位置:  开发笔记 > 编程语言 > 正文

在javascript中检测错误的电子邮件地址

如何解决《在javascript中检测错误的电子邮件地址》经验,为你挑选了2个好方法。

我注意到有时候用户错误输入他们的电子邮件地址(以联系我们的形式),例如,键入@ yahho.com,@ yhoo.com或@ yahoo.co而不是@ yahoo.com

我觉得这可以通过一些javascript在现场纠正.只需检查电子邮件地址是否存在可能的错误,例如上面列出的错误,这样如果用户键入his_email@yhoo.com,就会显示非突兀的消息,或类似的消息,表明他可能意味着@yahoo. com,并要求仔细检查他是否正确输入了他的电子邮件.

问题是:
如何检测-in java脚本 - 字符串与"yahoo"或"yahoo.com"非常相似?或者一般来说,我如何检测两个字符串之间的相似程度?

PS(这是旁注)在我的具体案例中,用户不是以英语为母语的人,而且大部分用户都不熟悉,网站本身不是英文.



1> Paolo Bergan..:

这是一个脏实现,可以使用它来进行一些简单的检查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 = 'whatever@yahoo.om';
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] + '?');
    }
}



2> Abie..:

除了soundex之外,您可能还想了解用于确定Levenshtein距离的算法.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有