我想检查用户输入是否是JavaScript的电子邮件地址,然后将其发送到服务器或试图发送电子邮件,以防止最基本的误解。


当前回答

我稍微修改了Jaymon的答案,对于那些想要真正简单的验证的人来说:

anystring@anystring.anystring

常规表达:

/^\S+@\S+\.\S+$/

防止多种 @ 标志相匹配:

/^[^\s@]+@[^\s@]+\.[^\s@]+$/

上面的序列匹配整个序列,删除领先和 ^ 并追踪 $ 如果你想匹配在序列中的任何地方。

如果你想匹配整个字符串,你可能想先切割()字符串。

示例 JavaScript 功能:

函数验证电子邮件(电子邮件) { var re = /\S+@\S+\.\S+/; return re.test(电子邮件); } console.log(验证电子邮件(我的电子邮件是 anystring@anystring.any')); // true console.log(验证电子邮件(我的电子邮件是 anystring@anystring.any')); // false

其他回答

我更喜欢保持它简单,并让我的用户快乐,我也更喜欢易于理解的代码。

function isValidEmail(value) {
    const atLocation = value.lastIndexOf("@");
    const dotLocation = value.lastIndexOf("."); 
    return (
        atLocation > 0 &&
        dotLocation > atLocation + 1 &&
        dotLocation < value.length - 1
    );
};

确保“@”不是第一辆车(在前面有什么东西) 确保“”是“@”之后,并且他们之间至少有一辆车 确保“@”之后至少有一辆车。

这会允许无效的电子邮件地址通过吗?当然,但我不认为你需要更多的好用户体验,允许你启用/禁用一个按钮,显示错误消息等。

Rnevius的(和同事)解决方案是辉煌的,但它允许添加Cyrillic,日本语,Emoticons和其他单码符号,一些服务器可能受到限制。

<unk> <unk> <unk> <unk> <unk> <unk> <unk> <unk>

<unk> <unk> <unk> <unk> <unk> <unk> <unk> <unk>

我正在使用这个功能

/**
 * @param {*} email
 */
export const validateEmail = email => {
    return new RegExp(/[\w-]+@([\w-]+\.)+[\w-]+/gm).test(email);
};

Sectrean的解决方案工作得很好,但它失败了我的镜头,所以我添加了一些漏洞:

function validateEmail(email){ 
     var re = /^(([^<>()[]\\.,;:\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,}))$/; 
     return re.test(email); 
}

如果您正在使用 Closure 您可以使用内置的 goog.format.Email 地址类型:

http://docs.closure-library.googlecode.com/git/class_goog_format_EmailAddress.html

例如:

goog.format.EmailAddress.isValidAddrSpec("blah@blah.com")

请注意,通过阅读来源(上面的链接),您可以看到评论表示 IDN 不受支持,并且仅旨在覆盖大多数地址:

// This is a fairly naive implementation, but it covers 99% of use cases.
// For more details, see http://en.wikipedia.org/wiki/Email_address#Syntax
// TODO(mariakhomenko): we should also be handling i18n domain names as per
// http://en.wikipedia.org/wiki/Internationalized_domain_name