检查字符串中是否包含电子邮件地址?

10

如何检查一个字符串是否包含电子邮件地址。

这个电子邮件地址可能包含在很多其他的文本中。

另外,并不一定要严格验证电子邮件地址本身。更多的是想确保 a@b.xyz 出现在字符串中。

示例字符串:

Overall I liked the service, but had trouble using the widget generator.

Want more info? You can contact me at bob@example.org.

纯JavaScript也可以,但我偶尔会用到jQuery,所以如果有某种辅助函数可以使这更容易……那就使用它吧。


2
我想要JavaScript,不是PHP。就像@WesleyMurch所说的那样。 - Shpigford
@WesleyMurch 哎呀,我的错 :( 但是正则表达式在JavaScript中也可以使用。 - Ja͢ck
1
顺便说一句,这篇帖子已经成为谷歌搜索中“javascript check if a string contains an email address”的排名第一。一个好的答案会很有帮助,而不是因为它与另一个问题有点相关而驳回该问题。 - Wesley Murch
你也可以查看这个答案 - Ja͢ck
除了正则表达式之外,这是一个带有突出php参考的Javascript问题...已触发! - Kickaha
3个回答

16

Debuggex Example

JsFiddle Example

function checkIfEmailInString(text) { 
    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(text);
}

另一方面,它不能匹配换行符,有什么想法如何修改?https://regex101.com/r/rN6eD6/1 - Jimmyt1988

8
你可以使用以下内容:
var StrObj = "whatever, this is my email dave@gmail.com other text";
var emailsArray = StrObj.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
if (emailsArray != null && emailsArray.length) {
    //has email
}

这也让你可以从数组中获取电子邮件地址,如果需要的话。


这至少对于Cyrilic电子邮件地址是行不通的,可能对其他一些电子邮件地址也是如此。例如来自此域的电子邮件 - https://админ.com - Sam Tyurenkov

1

尝试

/\b[a-z0-9-_.]+@[a-z0-9-_.]+(\.[a-z0-9]+)+/i.test(text)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接