以下功能可以验证电子邮件吗?

时间:2011-07-19 07:14:48

标签: javascript

刚刚测试过此功能以验证电子邮件。但是,它不会验证电子邮件中是否存在点。为什么会发生这种情况,我该如何解决?

<script type="text/javascript">
  function isEmail(textbox){

    var reg4 =/^(\w+)@(\w+).(\w+)$/;
    if(reg4.test(textbox.value)){

            return true;
        }

    return false;
}
</script>

5 个答案:

答案 0 :(得分:3)

不,这还不够。

特别是,它不处理所有这些(合法)变体:

  1. 引用的用户部分,例如“我的名字”@ example.com

  2. 国际化域名(IDN)

  3. 具有两个以上标签的域名

  4. 只有一个标签的域名(是的,那些合法的)

  5. 域名中的连字符

  6. user@[1.2.3.4]

  7. 通过正则表达式验证电子邮件地址是very hard。有关正式的语法定义,请参阅section 3.4.1 of RFC 5322

答案 1 :(得分:2)

请勿使用正则表达式来验证电子邮件地址。电子邮件地址可能包含许多您无法想象的内容(如空格),并且用户更可能会意外输入无效的电子邮件地址而不是无效的电子邮件地址。只需检查是否有@,然后根据需要发送确认电子邮件。

来自an answer to a related question

  

没有好的(现实的,见the fully RFC 822 compliant regex)常规   表达这个问题。语法(在RFC 5322中指定)是   太复杂了。使用真正的解析器,或者更好的是,通过验证   尝试(发送消息)。

答案 2 :(得分:1)

点在正则表达式中有意义

使用[\.]代替.

答案 3 :(得分:1)

您需要转义点,通常匹配任何字符。

var reg4 =/^(\w+)@(\w+)\.(\w+)$/;

答案 4 :(得分:1)

使用反斜杠转义点:\.。但是,之后你的正则表达式不会很好,因为它不会接受post-@部分中的多个点,例如域foo.co.uk

总而言之,我建议使用regex来验证电子邮件,因为它们往往会得到overcomplicated ;-)只需检查是否存在@后跟一个点,或使用类似的宽松算法。