обнаружение введенных с опечаткой адресов электронной почты в JavaScript

Возможно, один чистый способ

t = number.split('x')
x, y = int(t[0]), int(t[2])
5
задан hasen 20 January 2009 в 03:44
поделиться

5 ответов

Вот грязная реализация, которая могла отчасти получить Вас некоторые простые проверки с помощью 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] + '?');
    }
}
10
ответ дан 18 December 2019 в 09:10
поделиться

В дополнение к soundex можно также хотеть взглянуть на алгоритмы для определения расстояния Левенштейна.

6
ответ дан 18 December 2019 в 09:10
поделиться

Выезд soundex и Различие: при использовании ajax, у Вас может быть SQL-сервер, проверяют soundex-значение слов против "корректных" доменов и возвращают предложения. Также возможно сделать собственную версию soundex (не сложный).

SoundEx SQL Server функционируют на нелатинских наборах символов?

Структура данных для soundex алгоритма?

Как Вы реализуете, "Вы имели в виду"?

2
ответ дан 18 December 2019 в 09:10
поделиться

Конечно, как первый шаг, Вы могли разделить доменное имя и сделать поиск DNS - который должен, по крайней мере, сказать Вам, если это, кажется, законно.

1
ответ дан 18 December 2019 в 09:10
поделиться

Могло бы быть возможно использовать regex, но лично, это будет брать меня слишком долго для записи того, которое я был бы доволен этим, мог получить все возможные перестановки, не вызывая слишком много ложных положительных сторон.

Так, вот то, что я сделал бы:

  • Твердый код список всех общих опечаток.
  • Используйте нечувствительное к регистру сравнение строк для сравнения электронной почты с каждой строкой в списке.
  • Если существует соответствие, отобразите предупреждение - "Вы имели в виду yahoo.com?"

Да, это не очень симпатично, но это не кажется (по крайней мере, от Вашего вопроса) как, у Вас будет это многими для проверки, таким образом, это должно будет работать очень хорошо. Это также не кажется (по крайней мере, мне) как что-то стоящее поместить много времени в, таким образом, это - невероятное простое решение, в котором можно было выполнить приблизительно 15-30 минут.

-1
ответ дан 18 December 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: