检查字符串是否是PHP中的电子邮件地址

我正在尝试执行SQL查询,但是我需要以某种方式检查该值是否是电子邮件地址。我需要一种方法来检查$useremail是否为电子邮件地址,因为我的表中有诸如此类的用户值。

test
test2
test@example.com
test2@example.com
test392
test@example.net

等等...

我需要这样做,以便$useremail检查$user以查找它是否为电子邮件地址。 因此,我可以更新值WHERE user=test OR user=test@example.com等。

$user = strtolower($olduser);
$useremail = "";

mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$useremail");
homework asked 2020-01-06T06:11:43Z
11个解决方案
203 votes

没有正则表达式:

<?php
    if(filter_var("some@address.com", FILTER_VALIDATE_EMAIL)) {
        // valid address
    }
    else {
        // invalid address
    }
?>
Uri answered 2020-01-06T06:12:12Z
8 votes

最简单的方法是使用正则表达式来检查电子邮件地址,尽管对此准确性有一些分歧。 在此详细讨论此过程:

使用正则表达式验证电子邮件地址

您可以在MySQL中使用REGEXP根据您的正则表达式从数据库中进行选择:

[http://dev.mysql.com/doc/refman/5.1/en/regexp.html]

Travis answered 2020-01-06T06:12:46Z
6 votes
if(filter_var($email, FILTER_VALIDATE_EMAIL))
{
    echo 'This is a valid email address.';
    echo filter_var($email, FILTER_VALIDATE_EMAIL);
    //exit("E-mail is not valid");
}
else
{
    echo 'Invalid email address.';
} 
Ben answered 2020-01-06T06:13:01Z
5 votes

这不是一个好方法,它不会检查电子邮件是否存在,但会检查它是否看起来像是带有@和域扩展名的电子邮件。

function checkEmail($email) {
   $find1 = strpos($email, '@');
   $find2 = strpos($email, '.');
   return ($find1 !== false && $find2 !== false && $find2 > $find1);
}

$email = 'name@email.com';
if ( checkEmail($email) ) {
   echo $email . ' looks like a valid email address.';
}
Jake answered 2020-01-06T06:11:53Z
5 votes

您可以使用正则表达式来验证输入字符串是否与电子邮件地址匹配:

<?php 
$email = "someone@example.com"; 
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
  echo "Valid email address."; 
} 
else { 
  echo "Invalid email address."; 
} 
?>

从:[http://www.totallyphp.co.uk/code/validate_an_email_address_using_regular_expressions.htm]

编辑:有关更准确的表达式,请参阅有关此问题的特拉维斯答案

Rubens Farias answered 2020-01-06T06:13:31Z
5 votes

此函数is_email()将为您提供有关字符串是否为有效电子邮件地址的明确答案。 据我所知,没有其他解决方案会以相同的权限级别执行此操作。

如果我正确理解该示例,则可以这样使用它

$user = strtolower($olduser);
$useremail = (is_email($user)) ? $user : '';

PHP内置函数不完整。 我是is_email()的主要作者,所以我在这里吹小号,但我为此做了很多工作,以使其他人不再需要。

Dominic Sayers answered 2020-01-06T06:14:00Z
3 votes

我已经在数百个站点中使用此功能很多年了。 这可能并不完美,但我从未抱怨过假阴性(或阳性):

function validate_email($email) {
    return (preg_match("/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/", $email) || !preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/", $email)) ? false : true;
}
Rob answered 2020-01-06T06:14:20Z
3 votes

除了几乎不支持所有可用TLD的所有正则表达式建议(包括WHERE user=test OR user=test@example.comWHERE)以及即将到来的ICANN决定允许URL中的中文和阿拉伯语(这会使[a-z]\w失败),以下是更多正则表达式建议 通用正则表达式就足够了

([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)

我还要提到,执行WHERE user=test OR user=test@example.com太容易出错。 最好在表中使用自动生成的PK,并在WHERE子句中使用它。

我真的看不到符合RFCxxxx规范的严格,冗长和不可读的mailregexes的价值。 最好的方法仍然是将带有激活密钥链接的邮件发送给最终用户,以使其确认邮件地址。 还要以表格形式告知。 如有必要,让用户像输入密码一样输入两次电子邮件地址。

BalusC answered 2020-01-06T06:14:50Z
2 votes
$user_email = "email@string.com";

function isEmail($user) {
     if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
          return true
     } else {
          return false
     }
}

if (isEmail($user_email)) {
     // email is valid, run the query
     mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$user_email");
}
iamkoa answered 2020-01-06T06:15:06Z
2 votes

由于每个人都在发布他们的正则表达式,所以这是我的:^((([\w+-]+)(.[\w+-]+)*)|(\"[^(\|\")]{0,62}\"))@(([a-zA-Z0-9-]+.)+([a-zA-Z0-9]{2,})|[?([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})(.([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})){3}]?)$

据我所知,它支持RFC规范中的所有内容,包括大多数人通常不包含的许多内容。

Scott answered 2020-01-06T06:15:30Z
0 votes
$user_email = "email@gmailcom";

function isEmail($email) {
     if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
          return true;
     } else {
          return false;
     }
}

if (isEmail($user_email)) {
     // email is ok!
} else {
     // email not ok
}
Douglas Evaristo answered 2020-01-06T06:15:45Z
translate from https://stackoverflow.com:/questions/1725907/check-if-a-string-is-an-email-address-in-php