使用javascript进行超级简单的电子邮件验证

使用javascript进行超级简单的电子邮件验证,javascript,jquery,Javascript,Jquery,我正在制作一个非常简单的电子邮件验证脚本,基本上只检查以下内容 电子邮件不是空白的 电子邮件包含一个@符号,前面至少有一个字符 有一个域ie@后面至少有2个字母 以句号结尾,后面至少有2个字母 我知道还有很多支票,但我看着这些正则表达式规则,我的大脑停止了工作。我想如果我从像这样的小事情开始,我也许能够把我的大脑围绕在更复杂的规则上 目前,我使用一些jquery执行以下操作: var booking_email = $('input[name=booking_email]').val();

我正在制作一个非常简单的电子邮件验证脚本,基本上只检查以下内容

  • 电子邮件不是空白的
  • 电子邮件包含一个@符号,前面至少有一个字符
  • 有一个域ie@后面至少有2个字母
  • 以句号结尾,后面至少有2个字母
  • 我知道还有很多支票,但我看着这些正则表达式规则,我的大脑停止了工作。我想如果我从像这样的小事情开始,我也许能够把我的大脑围绕在更复杂的规则上

    目前,我使用一些jquery执行以下操作:

     var booking_email = $('input[name=booking_email]').val();
    
     if(booking_email == '' || booking_email.indexOf('@') == -1 || booking_email.indexOf('.') == -1) {
    
       // perform my alert
    
     }
    
    到目前为止,这足以阻止90%的虚假电子邮件。。。我只是想让它更有效一点,因为目前我的规则将允许像“@domain.com”或“'user@domain.'因为它只检查是否有句号和@符号

    谢谢你的提示。

    你可以试试这个:

    var booking_email = $('input[name=booking_email]').val();
    if(booking_email.match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/)) {
      // valid email
    } else {
      // not valid
    }
    
    var booking_email = $('input[name=booking_email]').val();
    
    if( /(.+)@(.+){2,}\.(.+){2,}/.test(booking_email) ){
      // valid email
    } else {
      // invalid email
    }
    

    其他人的建议应该行得通,但如果你想让事情保持简单,请尝试以下方法:

    var booking_email = $('input[name=booking_email]').val();
    if(booking_email.match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/)) {
      // valid email
    } else {
      // not valid
    }
    
    var booking_email = $('input[name=booking_email]').val();
    
    if( /(.+)@(.+){2,}\.(.+){2,}/.test(booking_email) ){
      // valid email
    } else {
      // invalid email
    }
    

    即使您决定使用更健壮的正则表达式,它也会帮助您理解正则表达式有时是多么简单。:)

    最不可能的贪婪验证是使用这个RegExp
    /^.+@.+\..+$/

    它只会确保地址符合您提到的最基本要求:域部分中@前面的字符和点前后的字符。验证更多的内容可能是错误的(你总是有机会将有效的电子邮件列入黑名单)

    像这样使用它:

    var is_valid_email = function(email) { return /^.+@.+\..+$/.test(email); }
    
    尝试:

    这是可用的最好的电子邮件验证正则表达式。我建议您使用此方法,除非您的目标非常简单但不完全兼容。

    RegexLib.com()有数百个电子邮件验证例程。我建议您阅读这篇文章:如果您决定继续使用regex进行验证,我最喜欢的测试工具是免费的regex设计器,在这里免费提供:。。。在一个大列表中测试所有电子邮件(可免费下载或购买…或使用您自己的当前数据库),以确保您的正则表达式在您的限制范围内是可接受的


    我会推荐一个基本的测试(很多都在regexlib.com的顶端…我不会因为他们的工作而获得荣誉,我经常使用),然后是一个需要用户交互的电子邮件验证程序。这是唯一真正“验证”电子邮件地址的方法。

    电子邮件很难测试,但您可以进行一些限制性但简单的电子邮件验证。我自己也用过这个,它能很好地确保95%是电子邮件地址

    var simpleValidEmail = function( email ) {
        return email.length < 256 && /^[^@]+@[^@]{2,}\.[^@]{2,}$/.test(email);
    };
    
    var simpleValidEmail=函数(电子邮件){
    返回email.length<256&&/^[^@]+@[^@]{2,}\.[^@]{2,}$/.test(email);
    };
    
    我建议将其用于“简单”验证

    要了解为什么这是一件很难解决的事情,请参阅:


    更新:更正的正则表达式

    如果只想检查业务电子邮件,请尝试以下操作:

    <script type="text/javascript">
    $(document).ready(function(e){
         $('#sendReq').click(function(){ 
         var email = $('#emailAddress').val();
         var reg = /^([\w-\.]+@(?!gmail.com)(?!yahoo.com)(?!hotmail.com)(?!yahoo.co.in)(?!aol.com)(?!abc.com)(?!xyz.com)(?!pqr.com)(?!rediffmail.com)(?!live.com)(?!outlook.com)(?!me.com)(?!msn.com)(?!ymail.com)([\w-]+\.)+[\w-]{2,4})?$/;
          if (reg.test(email)){
         return 0;
         }
         else{
         alert('Please Enter Business Email Address');
         return false;
         }
         });
        });
    </script>
    
    
    $(文档).ready(函数(e){
    $('#sendReq')。单击(函数(){
    var email=$('#emailAddress').val();
    var reg=/^([\w-\.]+@(?gmail.com)(!yahoo.com)(!hotmail.com)(!yahoo.co.in)(!aol.com)(!abc.com)(!xyz.com)(!pqr.com)(!rediffmail.com)(!live.com)(!outlook.com)(!me.com)(!msn.com)(!ymail.com)(!ymail.com)([\w-]\++[\w-]){2,4}/;
    如果(注册测试(电子邮件)){
    返回0;
    }
    否则{
    警报(“请输入业务电子邮件地址”);
    返回false;
    }
    });
    });
    
    根据前面的回复,此答案添加+号并扩展到tld,字符数超过4个

    function validateEmail(email) {
        const regex = /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,15}$/;
        return regex.test(email);
    }
    

    一个可能有助于使用正则表达式的工具是。你更喜欢使用正则表达式或简单javascript的解决方案?简单javascript。。正则表达式可能更好,但我不喜欢它的非直观格式。我不喜欢使用我看不懂的代码,也不喜欢使用ie复制和粘贴正则表达式的东西。仅仅是因为如果我收到一封电子邮件不起作用的投诉,我不能简单地看一看,就知道为什么脚本不起作用。大约两年前,我写了这样一句话:很好,你比我早11秒发了帖子。尽管这个RegExp有点正确,但不需要使用捕获参数,您应该使用
    测试
    而不是
    搜索
    ,并且锚定RegExp始终是一个好的做法。开始时的
    ^
    和结束时的
    $
    都是“锚定”。它们规定字符串必须精确地以^后面的内容开始,以$前面的内容结束。查看此信息的一个简单方法是,
    /A/
    将与“A”匹配,但
    /^A/
    将不匹配。是否可以将其更改为只允许一个
    @
    登录电子邮件id?我的意思是,这显然是错误的。它要么是固定的,要么至少不被接受为答案。这不是多余的吗
    (.+){2,}
    它的意思是“任何字符一次或多次,至少两次或多次”。。。它不应该是
    {2,}
    这不会返回真/假匹配,因为它会返回所有可能匹配有效电子邮件模式的模式。它应该返回email.test(…);即便如此,它在包含特殊字符的有效模式上返回false,除非您通过escape()之类的东西明确地将它们排除在验证之外(例如')[这也会杀死它]——正如在前面的评论中所述,所有的“maybe”字符使有效的正则表达式几乎不可能。最好用一个简单的例程进行测试,然后进行电子邮件验证:(这完全基于RFC验证)您的限制太多了。例如,您不允许gmail在名称部分使用+符号标记邮件。在域部件上进行测试之前,必须将其转换为punycode,否则您不支持IDN。这正是我想要的。我会在后端做更多的验证,但允许JS至少剔除更明显的假货是很方便的。这比accep好