如何在JavaScript中验证电子邮件地址

是否有正则表达式来验证JavaScript中的电子邮件地址?

老丝Tom前端2020/03/09 12:38:21
<form name="validation" onSubmit="return checkbae()">
    Please input a valid email address:<br />

    <input type="text" size=18 name="emailcheck">
    <input type="submit" value="Submit">
</form>

<script language="JavaScript1.2">
    var testresults
    function checkemail(){
        var str = document.validation.emailcheck.value
        var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
        if (filter.test(str))
            testresults = true
        else {
            alert("Please input a valid email address!")
            testresults = false
        }
        return (testresults)
    }
</script>

<script>
    function checkbae(){
        if (document.layers || document.getElementById || document.all)
            return checkemail()
        else
            return true
    }
</script>
做个有心人2020/03/09 12:38:21

Microsoft在ASP.NET MVC中提供的正则表达式

/^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/

如果存在缺陷,我会在此处发布-尽管它始终非常适合我的需求。

ItachiHarry2020/03/09 12:38:21

显然,就是这样:

/^([\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

取自10年10月1日http://fightingforalostcause.net/misc/2006/compare-email-regex.php

但是,当然,这忽略了国际化。

猿Sam2020/03/09 12:38:21

这是有关使用正则表达式验证电子邮件地址的很好的讨论。比较验证正则表达式的电子邮件地址

这是当前与JavaScript兼容的顶级表达式,仅供参考:

/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i
GO路易西门2020/03/09 12:38:20

不检查TLD是否存在的解决方案是不完整的。

对此问题的几乎所有答案都建议使用Regex来验证电子邮件地址。我认为Regex仅适用于基本验证。看来,电子邮件地址的检查验证实际上是两个独立的问题:

1-电子邮件格式的验证:确保电子邮件是否符合RFC 5322中电子邮件的格式和模式,以及TLD是否实际存在。您可以在此处找到所有有效TLD的列表

例如,尽管该地址example@example.ccc将通过正则表达式,但它不是有效的电子邮件,因为ccc它不是IANA的顶级域。

2-确保电子邮件确实存在:为此,唯一的选择向用户发送电子邮件

梅老丝2020/03/09 12:38:20

很难使电子邮件验证程序100%正确。使其正确的唯一真实方法是向该帐户发送测试电子邮件。也就是说,有一些基本的检查可以帮助确保您得到的东西合理。

一些需要改进的地方:

代替new RegExp,只需尝试regexp像这样写出

if (reg.test(/@/))

其次,检查以确保在@符号后有一个句点,并确保在@s和句点之间有字符

前端Harry十三2020/03/09 12:38:20

在验证函数中使用以下代码:

var emailID = document.forms["formName"]["form element id"].value;
atpos = emailID.indexOf("@");
dotpos = emailID.lastIndexOf(".");
if (atpos < 1 || ( dotpos - atpos < 2 ))
{
    alert("Please enter correct email ID")
    return false;
}

否则,您可以使用jQuery内部规则定义:

eMailId: {
    required: true,
    email: true
}
前端猿2020/03/09 12:38:20

这是节点验证器的操作方式:

/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[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]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/
古一凯Gil2020/03/09 12:38:20

只需使用HTML来检查输入的电子邮件地址是否有效。

<input type="email"/>

无需编写任何函数进行验证。

A神无2020/03/09 12:38:20

所有电子邮件地址都包含一个“ @”符号。测试必要条件:

email.indexOf("@") > 0

不要为更复杂的事情而烦恼。即使您可以完美地确定电子邮件在RFC语法上是否有效,也不会告诉您电子邮件是否属于提供电子邮件的人。那才是真正重要的。

要进行测试,请发送验证消息。

Jim小胖米亚2020/03/09 12:38:20

哇,这里有很多复杂性。如果您只想捕捉最明显的语法错误,我将执行以下操作:

^\S+@\S+$

它通常会捕获用户所犯的最明显的错误,并确保表单最正确,这就是JavaScript验证的全部内容。

乐Near2020/03/09 12:38:20

对于需要真正简单验证的人,我对Jaymon的答案做了一些修改:

anystring@anystring.anystring

正则表达式:

/\S+@\S+\.\S+/

JavaScript函数示例:

function validateEmail(email) 
{
    var re = /\S+@\S+\.\S+/;
    return re.test(email);
}
十三神无2020/03/09 12:38:20

在决定使用正则表达式验证电子邮件时,您需要了解一些内容:这可能不是一个好主意一旦您对此有所了解,就有许多实现可以使您半途而废,本文对它们进行了很好的总结。

简而言之,唯一可以绝对肯定地确定用户输入的实际上是电子邮件的唯一方法是实际发送电子邮件并查看会发生什么。除此之外,所有这些只是猜测。