1

GMail のワイルドカード機能 (username+wildcard@gmail.com) を最大限に活用しています。+残念ながら、ほとんどの開発者は、電子メール アドレスで有効であることを理解していないようです。これにより、購読を解除しようとすることが時々本当の雑用になります.

たとえば、 TicketMasterを例にとると、彼らは電子メール アドレスをわざわざエスケープしていないことにすぐに気付くので、テキスト フィールドはデフォルトで "user wilcard@gmail.com" になります。問題ありません+。手動で追加できます。[送信] をクリックすると、検証によってすぐに停止することがわかります。今何?

ほとんどのユーザーは、さらに TicketMaster に連絡して状況を説明する必要があります。調査するために FireBug を開きました。そのとき、ばかげているほどの冗長性を備えた、なんと74 行もの電子メール検証機能に気付きました。私のお気に入りのチェックは 20 行目で、ユーザーに自分のメールアドレスがcannot have more than one @. 非現実的。私の 2 番目のお気に入りは、使用されている 2 つの正規表現です。

想像してみてください...誰かがこれに対してお金を支払われました...そして、見た目から、彼らは行数によって支払われました.

//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 にブレーク ポイントを配置し、検証関数に渡される電子メール アドレスの値を変更しました。そこから、すべてがうまくいきました...

とはいえ、電子メール アドレスで有効な単語をどのように広めればよいでしょうか。+ 開発者が有効な電子メール アドレスを構成するものを認識していないため、特定の Web サイトで使用したい電子メール アドレスを使用できないことがよくあります。

4

1 に答える 1

2

それらをrfcに向けます: https ://www.rfc-editor.org/rfc/rfc5322#page-10

3.2.3は「+」が有効なアトムであると述べています

于 2010-05-04T18:54:08.253 に答える