在字符串上查找电子邮件

时间:2015-02-17 23:38:49

标签: javascript regex json

几天前我问了这个问题:

Unable to get a specific value on a JSON object

第一个答案是完美的。现在我需要修改该正则表达式以便查找电子邮件。问题是我对正则表达式一无所知,我一直在环顾四周,但似乎无法将它拉下来。 这是代码:

var m=null
      , result=JSON.stringify(response)
      , re=/"message":"([^"]+)"/g
      , messages=[];
  while( m=re.exec(result) ) {
      messages.push(m[1]);

我的另一个问题解释了一切,但基本上这段代码的作用是message":"THIS TEXT" 现在我想知道该文本是否包含电子邮件。

我一直在查看许多javascript正则表达式示例并发现它相当令人困惑所以如果你能给我一些解释(或者其他东西可以阅读)关于为什么它按照它完成的方式完成我真的很感激。

2 个答案:

答案 0 :(得分:2)

正在寻找的Regexp漫长而丑陋。 RFC标准中的电子邮件地址定义过于复杂和宽松。请参阅"有效的电子邮件地址"关于wikipedia的部分。但是,您可以使用这个简单的正则表达式检查字符串是否看起来像电子邮件:

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

可以在Regexper

找到有关其工作原理的说明

答案 1 :(得分:1)

您可以使用一些非常长的正则表达式来验证基于RFC标准的电子邮件。 Here is a regex that verifies regexes based on RFC882,这是一个简短易懂的东西。

如果你想像电子邮件一样验证看起来的任何内容,你可以使用它:

^.+@.+\..+$

但是,这个正则表达式还允许空格和多个@符号。所以,你可以使用这个:

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

但这会允许名称和顶级域名中的特殊字符,因此,这里有一个简短的正则表达式,几乎可以匹配所有英文电子邮件(以及那些不是英文的电子邮件):

^([a-zA-Z0-9\-_\~\!\$\&\'\(\)\*\+\,;\:\=]+)\@(.+)\.([a-zA-Z]{2,36})$

此正则表达式将匹配字符a-zA-Z0-9-_~!$&'()*+,,{在;符号之前{1}},:=一次或多次匹配@符号后面的任何字符(现在几乎所有字符都允许新的国际域名,并允许{T {1}}或@ 2次或更多次作为TLD。

有一些国际域名中没有英文字符,因此如果您期待和国际受众,最好将a-z替换为A-Z

在regex101.com上

Here's a live preview of Regex #1

在regex101.com上

Here's a live preview of Regex #2

在regex101.com上

Here's a live preview of Regex #3