Возможно, один чистый способ
t = number.split('x')
x, y = int(t[0]), int(t[2])
Вот грязная реализация, которая могла отчасти получить Вас некоторые простые проверки с помощью 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] + '?');
}
}
В дополнение к soundex можно также хотеть взглянуть на алгоритмы для определения расстояния Левенштейна.
Выезд soundex и Различие: при использовании ajax, у Вас может быть SQL-сервер, проверяют soundex-значение слов против "корректных" доменов и возвращают предложения. Также возможно сделать собственную версию soundex (не сложный).
SoundEx SQL Server функционируют на нелатинских наборах символов?
Конечно, как первый шаг, Вы могли разделить доменное имя и сделать поиск DNS - который должен, по крайней мере, сказать Вам, если это, кажется, законно.
Могло бы быть возможно использовать regex, но лично, это будет брать меня слишком долго для записи того, которое я был бы доволен этим, мог получить все возможные перестановки, не вызывая слишком много ложных положительных сторон.
Так, вот то, что я сделал бы:
Да, это не очень симпатично, но это не кажется (по крайней мере, от Вашего вопроса) как, у Вас будет это многими для проверки, таким образом, это должно будет работать очень хорошо. Это также не кажется (по крайней мере, мне) как что-то стоящее поместить много времени в, таким образом, это - невероятное простое решение, в котором можно было выполнить приблизительно 15-30 минут.