Подтверждение по электронной почте ... пропагандирует использование +, и как бы вы смущались, написав это? - PullRequest
1 голос
/ 04 мая 2010

Я в полной мере использую функцию подстановочных знаков GMail (username+wildcard@gmail.com). К сожалению, кажется, что большинство разработчиков не понимают, что + действительно в адресе электронной почты. Это иногда делает попытку отписаться от настоящей рутины.

Возьмите, например, TicketMaster ... сразу же вы заметите, что они даже не удосужились уйти от адреса электронной почты, поэтому текстовое поле по умолчанию имеет значение "user wilcard@gmail.com". Не проблема, мы можем просто добавить + вручную. После нажатия кнопки «Отправить» вы увидите, что проверка останавливает вас прямо в ваших треках. Что теперь?

Большинству пользователей придется дополнительно связаться с TicketMaster и попытаться объяснить ситуацию. Я открыл FireBug для расследования. Именно тогда я заметил эту колоссальную 74 строку функцию проверки электронной почты с такой избыточностью, что это смешно. Мой любимый чек находится в строке 20, сообщая пользователю, что его / ее электронная почта cannot have more than one @. Нереально. Моя вторая любимая часть - это ДВА регулярных выражения!

Представьте себе ... кому-то за это заплатили деньги ... и, судя по всему, им заплатили по количеству строк.

//Validates the email
function validateOptoutEmail(object) {
    var emailStr = object.value;
    if(emailStr == '' || emailStr == null) {
        alert('Email can not be empty. Please provide email');
        object.value = '';
        object.focus();
        return false;
    } else if(Trim(emailStr).length == 0) {
        alert('Email can not be empty. Please provide email');
        object.value = '';
        object.focus();
        return false;
    } else {
        var atcount=0;
        for(var i=0;i<emailStr.length;i++) {
            if(emailStr.charAt(i)=='@') atcount++;
        }
        if(atcount>1) {
            alert('Invalid email. Email cannot have more than one @');
            object.value = '';
            object.focus();
            return false;
        }

        if(emailStr.indexOf('.') == -1) {
            alert('Invalid email. Email must have one dot');
            object.value = '';
            object.focus();
            return false;
        }
        if(emailStr.indexOf('..')!= -1) {
            alert('Invalid email. Email cannot have consecutive dots');
            object.value = '';
            object.focus();
            return false;
        }
        var dotpos=0;
        for(var i=dotpos;i< emailStr.length;i++) {
            var ichar=emailStr.charAt(i);
            if(ichar=='.') dotpos=i;
        }
        for(var i=dotpos+1;i< emailStr.length;i++) {
            var ichar=emailStr.charAt(i);
            if((!isNaN(ichar)) || (ichar == '_')) {
                alert('Invalid email. Email cannot have numbers or _ after dot');
                object.value = '';
                object.focus();
                return false;
            }
        }
        var pattern2=/^([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
        var pattern1=/^[0-9a-zA-Z\-\_.]+@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
        if (pattern1.test(emailStr)) {
            if(pattern2.test(emailStr)) {
                return true;
            } else {
                alert('Invalid email');
                object.value = '';
                object.focus();
            }
            return true;
        } else {
            alert('Invalid email');
            object.value = '';
            object.focus();
            return false;
        }
        alert('Invalid email');
        object.value = '';
        object.focus();
        return false;
    }
}

В конце концов я просто установил точку останова в FireBug и изменил значение адреса электронной почты, передаваемого в функцию проверки. Оттуда все работало нормально ...

Все это говорит, как мы можем получить слово, что + является действительным в адресе электронной почты? Слишком часто я не могу использовать адрес электронной почты, который я хочу использовать для некоторые веб-сайты, потому что разработчики просто не знают, что представляет собой действительный адрес электронной почты.

1 Ответ

2 голосов
/ 04 мая 2010

Направьте их на rfc: http://tools.ietf.org/html/rfc5322#page-10

3.2.3 состояния "+" является действительным атомом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...