【问题标题】:How to check if a string contains a email? [duplicate]如何检查字符串是否包含电子邮件? [复制]
【发布时间】:2016-12-12 09:33:43
【问题描述】:

我有这段代码可以检查电子邮件是否有效:

$email = "abc123@sdsd.com"; 
$regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/'; 
if (preg_match($regex, $email)) {
 echo $email . " is a valid email. We can accept it.";
} else { 
 echo $email . " is an invalid email. Please try again.";
}

假设我有以下字符串:

<html>
<body>
<p>abc123@sdsd.com</p>
</body>
</html>

如何检查该字符串是否包含电子邮件? (因为它不适用于上面的代码)

【问题讨论】:

标签: php regex


【解决方案1】:

^$ 是锚点,需要完整的字符串匹配。如果您取消它,它将匹配字符串中某处的电子邮件。

正则表达式演示:https://regex101.com/r/xI0bC2/1

PHP 用法(已更新以存储找到的电子邮件):

<?php
$email = "<html>
<body>
<p>abc123@sdsd.com</p>
</body>
</html>"; 
$regex = '/[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})/'; 
if (preg_match($regex, $email, $email_is)) {
 echo $email_is[0] . " is a valid email. We can accept it.";
} else { 
 echo $email . " is an invalid email. Please try again.";
}

PHP 演示:https://eval.in/618679

【讨论】:

    【解决方案2】:

    这个问题没有真正的解决方案,因为你很容易得到误报。

    首先,您的模式过于幼稚,与许多正确的电子邮件地址不匹配。然而,匹配所有电子邮件地址的模式实际上并不存在(或者过于复杂且效率低下)

    一种折衷方案是使用 XPath 选择包含@ 的所有文本节点。然后将每个文本节点拆分为空白,并使用内置的电子邮件验证 PHP 函数测试每个部分:filter_var ($part, FILTER_VALIDATE_EMAIL)

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 2011-03-29
      • 2013-03-12
      • 2020-09-20
      • 2019-10-06
      • 2019-06-07
      • 2018-08-25
      • 2015-03-25
      • 2016-01-25
      相关资源
      最近更新 更多