【问题标题】:Find e-mails on string在字符串上查找电子邮件
【发布时间】:2015-04-18 20:20:16
【问题描述】:

几天前我问了这个问题:

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 正则表达式示例,发现它相当混乱,所以如果你能给我一些解释(或阅读一些东西)为什么它会以这种方式完成,我真的很感激。

【问题讨论】:

    标签: javascript regex json


    【解决方案1】:

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

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

    可以在Regexper找到有关其工作原理的说明

    【讨论】:

    • 我正在努力将这个正则表达式添加到我已经拥有的正则表达式中 /"message":"([^"]+)"/g
    • 我没有要测试的输入数据,但请尝试下一个:/"message":"([^@"]+@[^@"]+\.[^@"]+)"/g
    • 这条线完美无缺。如果我想在消息中查找某个单词怎么办? (再次,以我的正则表达式为起点)。例如:在“这个正则表达式完美工作”中找到“工作”。不要懒惰,真的花了我时间,但无法让它发挥作用
    • 你只需要测试消息是否包含一些单词?
    • 是的,基本上。我想检查消息是否包含某个单词
    【解决方案2】:

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

    如果您想验证任何看起来像电子邮件的东西,您可以使用这个:

    ^.+@.+\..+$
    

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

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

    但这将允许名称和 TLD 中包含特殊字符,因此,这里有一个简短的正则表达式,几乎可以匹配所有英文电子邮件(以及非英文电子邮件):

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

    这个正则表达式将匹配字符a-zA-Z0-9-_~!$&、@987654@3 987654338@、)*+,;:=@ 符号之前的一次或多次,将匹配 @98756 之后的任何字符@ 符号(现在几乎所有字符都可以用于新的国际域),并且允许将 a-zA-Z 用作 TLD 的 2 倍或更多倍。

    有些国际域名中没有英文字符,因此如果您期待国际受众,最好将[a-zA-Z]{2,36} 替换为.{2,36}

    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 在 regex101.com 上。

    【讨论】:

      猜你喜欢
      • 2013-03-20
      • 2023-04-02
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      • 2017-12-11
      • 2012-02-23
      相关资源
      最近更新 更多