分享
为什么问答平台  ›  专栏  ›  技术社区  ›  Langdon

电子邮件验证…提倡使用+,你写这封信会有多尴尬? - Email Validation… advocating the use of +, and how embarrassed would you be to have written this?

  •  1
  • Langdon  · 技术社区  · 1 周前

    我充分利用了Gmail的通配符功能(用户名+通配符@gmail.com)。不幸的是,大多数开发人员似乎不理解 + 在电子邮件地址中有效。这使得有时候试图取消订阅一项真正的工作。

    采取 TicketMaster 例如。。。你马上就会发现他们甚至都不想逃避电子邮件地址,所以文本字段默认为“user wilcard@gmail.com”。没问题,我们可以加上 + 手动。单击提交后,您会注意到验证会立即停止。现在怎么办?

    大多数用户需要进一步联系Ticketmaster并尝试解释这种情况。我打开火虫进行调查。就在那时,我注意到了这个巨大的声音 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 回复  |  直到 1 周前
        1
  •  2
  •   Ged    8 年前

    将它们指向RFC: http://tools.ietf.org/html/rfc5322#page-10

    3.2.3状态“+”是有效原子