使用JavaScript和正则表达式检查电子邮件地址

前一阵子我放了一个 使用JavaScript和正则表达式的密码强度检查器。 同样,您也可以使用相同的正则表达式(regex)方法检查电子邮件地址的结构。

如果您的表单元素具有 id =“电子邮件地址” 然后添加一个表格 onSubmit =“”返回checkEmail();”,这是一个Javascript函数,如果电子邮件地址具有有效的结构,则可以利用该函数返回警报:

function checkEmail() {
var email = document.getElementById('emailaddress');
var filter = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if (!filter.test(email.value)) {
alert('Please provide a valid email address');
email.focus;
return false;
}
}

该功能将电子邮件的内容验证为过滤器的内容。 如果比较失败,它将弹出警报,并将焦点返回到电子邮件地址字段!

41条评论

  1. 1

    对于具有多个电子邮件地址的表单,最好使用class =“ emailaddress”。 如果您拥有prototype.js库(http://www.prototypejs.org)包含在页面中,您可以执行以下操作:

    var 有效 = 真;
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $$('。emailaddress')。each(function(email){
    如果(!filter.test(email.value)){
    警报(请提供有效的电子邮件地址?);
    电子邮件焦点;
    有效=假;
    }
    });
    返回有效;

  2. 5
  3. 7

    我喜欢这个主意,但是我会犹豫采用这种特殊的正则表达式,而没有说明它不接受哪个合法电子邮件地址以及允许的非法地址。

    有关一个正则表达式的例子,它做得很好,并说明了它不涉及的情况,请参见:

    http://www.regular-expressions.info/email.html

    我个人的喜好是覆盖大多数简单的案例,并对其他所有内容发出警告,而不是拒绝它。 如果鲍勃真的想提交 bob@com.museum 而非 bob@museum.com,为什么不让他呢?

    • 8

      嗨Reg,

      您可以使用 在线正则表达式测试器.

      另外,如果您想确保 电子邮件地址 根据RFC有效。

      有几个原因不允许他人输入无效的电子邮件地址:
      1.当他们期望的电子邮件没有通过时,他们会为您烦恼–不管是否是您的错,地址输入错误。
      2.如果com.museum是有效域,例如Yahoo!。 操作它-任何退回的电子邮件地址都会对您公司的电子邮件传递声誉产生负面影响。 这可能导致您公司的所有电子邮件被阻止。
      3.如果您的电子邮件服务提供商允许您输入 bob@com.museum,您还需要为发送到该电子邮件地址的每封电子邮件付费,直到他们因退回而退订该地址为止。 我会避开任何允许这样的无效电子邮件地址的ESP-他们只是拿走您的钱!

      谢谢你的到来!
      道格

  4. 9
  5. 10

    编写表达式的方法要简单得多:
    var regex = /^[a-z0-9\._-]+@([a-z0-9_-]+\.)+[a-z]{2,6}$/i;
    –使用最终修饰符/ i时,无需指出大写范围。
    –我什么都不知道 TLD 里面有数字
    另外,我允许TLD最多包含6个字符。 新飞机定期到货,而您却一无所知(嗯,将来一些甚至可能会有数字,我知道)。

  6. 11

    您好,

    我正在尝试以现有形式实时使用此功能,但是这似乎并不能像您的密码强度检查器一样实时进行验证…

    还是,我就是那么无知,对我来说不是一件好事吗?

  7. 12

    顺便说一句,我真的很喜欢您在这里所做的事情,您的教程非常简单,我一定会为这个添加书签...。

  8. 13
  9. 16
  10. 17

    只是一个小小的修正:正则表达式的末尾有一个额外的()+。 它应显示为:

    ^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+[a-zA-Z0-9]{2,4}$

    对于第一个,可以接受任何长度的TLD(这并不像其他人所指出的那样本质上是错误的,但是如果这样做是可以缩短表达的话)。

  11. 18

    您能否解释一下此代码的正则表达式及其工作方式? 还涉及.test – .test是javascript中的默认语句,用于检查代码的情况与您在上述代码中所做的一样吗?

  12. 19
  13. 20

    这是电子邮件表达的简短代码-

    函数validateEmail(id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    返回emailPattern.test(id);

    }
    迪帕克·莱(Deepak Rai)
    瓦拉纳西

  14. 21
  15. 22
  16. 23

    谢谢,但是此正则表达式中有错误。 我不是正则表达式专家,但我尝试发送电子邮件:

    测试一下

    并且它通过了正则表达式……我注意到它缺少转义“。”的功能。 所以应该是:

    /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/

  17. 24
  18. 27

    好吧,这只是一个粗略的检查,但并非100%准确,例如, john_doe。@ gmail.com 这实际上不是有效的电子邮件地址(在电子邮件的本地部分中,最后一个字符不允许使用点号)。
    也可以接受 约翰…doe@gmail.com 这也是无效的,因为序列中最多只能有一个点。

    这些只是我乍看之下的一些缺陷。
    我的意图不是猛烈地指出这一点,以防万一有人打算将其用作安全检查–不够安全。

    有关有效电子邮件地址的信息,请检查以下内容: http://en.wikipedia.org/wiki/E-mail_address

  19. 28

    迪帕克

    实际上,我认为您需要对点(“。”)进行转义。 因此,您的函数应改为:

    函数validateEmail(id)
    {
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4}$/;
    返回emailPattern.test(id);

    }

    否则,点将表示“任何字符”。 我相信这些特殊字符需要转义。

    问候,

    费德里科

  20. 29

    函数validateEmail(fld){
    var error =“””;
    var tfld = trim(fld.value); //修剪掉空白的字段的值
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var invalidChars = / [(),;;:\” []] /;

    如果(fld.value ==“输入您的电子邮件地址”){

    error =“请输入您的电子邮件地址。n”;
    } else if(!emailFilter.test(tfld)){//测试电子邮件中的非法字符

    error =“请输入一个有效的电子邮件地址。n”;
    } else if(fld.value.match(illegalChars)){

    error =“请输入一个有效的电子邮件地址。n”;
    }
    返回错误;
    }

  21. 30

    函数validateEmail(fld){
    var error =“””;
    var tfld = trim(fld.value); //修剪掉空白的字段的值
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var invalidChars = / [(),;;:\” []] /;

    如果(fld.value ==“输入您的电子邮件地址”){

    error =“请输入您的电子邮件地址。n”;
    } else if(!emailFilter.test(tfld)){//测试电子邮件中的非法字符

    error =“请输入一个有效的电子邮件地址。n”;
    } else if(fld.value.match(illegalChars)){

    error =“请输入一个有效的电子邮件地址。n”;
    }
    返回错误;
    }

  22. 31

    函数validateEmail(fld){
    var error =“””;
    var tfld = trim(fld.value); //修剪掉空白的字段的值
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var invalidChars = / [(),;;:\” []] /;

    如果(fld.value ==“输入您的电子邮件地址”){

    error =“请输入您的电子邮件地址。n”;
    } else if(!emailFilter.test(tfld)){//测试电子邮件中的非法字符

    error =“请输入一个有效的电子邮件地址。n”;
    } else if(fld.value.match(illegalChars)){

    error =“请输入一个有效的电子邮件地址。n”;
    }
    返回错误;
    }

  23. 32

    函数validateEmail(fld){
    var error =“””;
    var tfld = trim(fld.value); //修剪掉空白的字段的值
    var emailFilter = /^[^@]+@[^@.]+.[^@]*ww$/;
    var invalidChars = / [(),;;:\” []] /;

    如果(fld.value ==“输入您的电子邮件地址”){

    error =“请输入您的电子邮件地址。n”;
    } else if(!emailFilter.test(tfld)){//测试电子邮件中的非法字符

    error =“请输入一个有效的电子邮件地址。n”;
    } else if(fld.value.match(illegalChars)){

    error =“请输入一个有效的电子邮件地址。n”;
    }
    返回错误;
    }

  24. 33
  25. 34
  26. 35
  27. 36
  28. 37
  29. 38
  30. 39
  31. 40

你觉得呢?

本网站使用Akismet来减少垃圾邮件。 了解您的数据如何处理.