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

时间:2011-02-11 01:23:22

标签: javascript jquery

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

  1. 电子邮件不是空白
  2. 电子邮件中包含一个至少包含1个字符的@符号
  3. 有一个域名,即@后至少有2个字母
  4. 它以一个至少有2个字母的完整停止结束
  5. 我知道还有更多检查,但我看看这些正则表达式规则,我的思维停止工作。我想如果我从像这样小的东西开始,我可以将我的大脑包裹在更复杂的规则中。

    目前正在使用一些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”。因为它只检查是否有一个fullstop和一个@符号。

    感谢您的任何提示。

9 个答案:

答案 0 :(得分:62)

其他人的建议应该可以正常工作,但如果你想保持简单,试试这个:

var booking_email = $('input[name=booking_email]').val();

if( /(.+)@(.+){2,}\.(.+){2,}/.test(booking_email) ){
  // valid email
} else {
  // invalid email
}

即使您决定使用更强大的功能,它也应该有助于您了解正则表达式的简单程度。 :)

答案 1 :(得分:38)

您使用此RegExp /^.+@.+\..+$/进行的最少贪婪验证 它只会确保地址符合您提到的最基本要求:@之前的字符以及域部分中点之前和之后的字符。验证更多可能是错误的(您总是有可能将有效的电子邮件列入黑名单)。

像这样使用它:

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

答案 2 :(得分:2)

RegexLib.com(http://regexlib.com/Search.aspx?k=email)有数百个电子邮件验证例程。我建议您阅读这篇文章:http://www.unwrongest.com/blog/email-validation-regular-expressions/如果您决定继续使用正则表达式进行验证,我最喜欢的测试实用程序是免费的正则表达式设计器,可以在这里免费使用:http://www.radsoftware.com.au/regexdesigner/ ...测试所有电子邮件在一个很大的列表中(可以免费下载或购买......或者使用你自己当前的数据库),以确保你的约束中的正则表达式是可以接受的。

我会推荐一个基本的测试(很多在regexlib.com的顶部......我不会因为我经常使用他们的工作而受到赞誉),接下来是需要用户交互的电子邮件验证例程。这是“验证”电子邮件地址的唯一真实方式。

答案 3 :(得分:1)

尝试:

function valid_email(email) {
   return email.match(/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i);
}

根据this article,这是最佳可用电子邮件验证正则表达式。我推荐使用它,除非你的目标非常简单但不完全兼容。

答案 4 :(得分:0)

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

var simpleValidEmail = function( email ) {
    return email.length < 256 && /^[^@]+@[^@]{2,}\.[^@]{2,}$/.test(email);
};

我会推荐这个简单的&#39;验证

要了解为什么这很难解决,请参阅:How to validate an email address using a regular expression?

更新:更正了正则表达式

答案 5 :(得分:0)

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

<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>

答案 6 :(得分:0)

基于此之前的Ian Christian Myers答复,此答案添加了+号,并扩展到tld中包含超过4个字符

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

答案 7 :(得分:0)

npm 上的 is-email 包是 super simple,如果有点松,就:

var matcher = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;

function isEmail(string) {
  return matcher.test(string);
}

它是由处理大量电子邮件的 segment.io 编写的。

答案 8 :(得分:-1)

你可以试试这个:

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
}