我正在尝试执行SQL查询,但我需要检查该值是否为电子邮件地址。
我需要一种方法来检查$user
是否是电子邮件地址,因为我在表格中有这样的用户值。
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");
答案 0 :(得分:190)
没有正则表达式:
<?php
if(filter_var("some@address.com", FILTER_VALIDATE_EMAIL)) {
// valid address
}
else {
// invalid address
}
?>
答案 1 :(得分:8)
最简单的方法是使用正则表达式来检查电子邮件地址,尽管对于它的准确程度存在一些分歧。这个过程在这里详细讨论:
Using a regular expression to validate an email address
您可以使用MySQL中的REGEXP根据您的正则表达式从数据库中进行选择:
答案 2 :(得分:6)
这不是一个好方法,也不会检查电子邮件是否存在,但会检查它是否看起来像是带有@和域扩展名的电子邮件。
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.';
}
答案 3 :(得分:5)
您可以使用正则表达式验证输入字符串,以查看它是否与电子邮件地址匹配:
<?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
编辑:要获得更准确的表达方式,请参阅此问题的Travis answer
答案 4 :(得分:5)
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.';
}
答案 5 :(得分:4)
此函数is_email()将为您提供有关该字符串是否为有效电子邮件地址的明确答案。据我所知,没有其他解决方案可以用同等级别的权限来做到这一点。
如果我正确理解了这个例子,你会像这样使用它
$user = strtolower($olduser);
$useremail = (is_email($user)) ? $user : '';
PHP内置函数不完整。我是is_email()
的主要作者,所以我在这里吹自己的小号,但我已经做了很多工作,以便没有其他人能够再次这样做。
答案 6 :(得分:3)
我在数百个网站上使用此功能已有多年。这可能并不完美,但我从来没有抱怨假阴性(或肯定):
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;
}
答案 7 :(得分:3)
除了所有正则表达式建议,这些建议主要不支持可用TLD的所有(包括例如.info
和.museum
)以及ICANN即将允许中文的决定URL中的阿拉伯语(允许[a-z]
和\w
失败),以下更通用的正则表达式就足够了
([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)
我还要提到做WHERE user=test OR user=test@example.com
太容易出错了。最好在表中使用自动生成的PK,并在WHERE
子句中使用它。
我并没有真正看到严格,冗长且不可读的mailregex符合RFCxxxx规范的价值。最好的方法是向最终用户发送带有激活密钥的链接的邮件,让它确认邮件地址。也可以在表格中告知。如有必要,让用户输入两次电子邮件地址,就像输入密码一样。
答案 8 :(得分:2)
$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");
}
答案 9 :(得分:2)
由于每个人都在发表他们的正则表达式,这是我的:
^((([\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规范中的所有内容,包括大多数人通常不包含的许多内容。
答案 10 :(得分:0)
$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
}