php正则 电子邮件,关于正则表达式:PHP电子邮件验证

本问题已经有最佳答案,请猛点这里访问。

对于php来说,使用preg(而不是ereg)进行电子邮件验证的最佳方法是什么,因为它被弃用/删除了。

我不需要检查网站是否存在(这不像是最大的安全性)。

我发现了很多方法,但它们(显然)不是很好的实践。

我建议您使用FILTER_VALIDATE_EMAIL过滤器:

if (filter_var($email, FILTER_VALIDATE_EMAIL)) {

//valid

}

还可以直接使用其正则表达式:

"/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD"

但是在这种情况下,如果在正则表达式中发现了一个bug,那么您将不得不更新程序,而不仅仅是更新php。

请记住,电子邮件也可以包含这些字符:'/*'。因此,这种验证并不能使数据库安全。

FielTyVar()对我来说是新的。电子邮件是有效的吗?

+1用于源代码引用。伟大的

到源代码的链接已断开。这里是最新的链接。regex也被更改。

除非你想使用一个非常长的正则表达式,否则你会遇到没有覆盖的有效电子邮件地址(比如unicode)。同样,假电子邮件地址也会被视为有效的,那么,如果你只需写test@test.com就可以摆脱它,那么验证的意义是什么呢?

验证电子邮件地址的最佳方法是发送一封确认电子邮件,其中包含一个要单击的链接。这只在电子邮件地址有效时有效:简单,不需要使用regex。

正如我所说,这不像是最大限度的安全

一个合理的开发人员在试图向"字符串"发送电子邮件之前,总是要检查给定地址的有效性。所以这不是一个论点。但不管怎样,都应该选择加入——这不是问题。

@简:那么,如果我的电子邮件是&诳224;&诳232;&诳236;&诳242;&诳249;@mydomain.com,而您的先发制人检查阻止我注册到您的网站怎么办?只需发送一封确认邮件,您就可以设置,无需在发送前检查有效性,并冒阻止有效电子邮件地址的风险。

@尼科:根据RFC2821和RFC2822,您的示例无效。两种情况都清楚地表明,只允许使用7bit ASCII字符。甚至都没有。我最好把这样一个错误的地址删除,而不是允许垃圾邮件发送者通过一些魔法头注入来被服务器滥用。此外,维基百科还阐述了以下关于本地部分国际化的内容:"当EAI标准化时,用户很可能在本地语言脚本或字符集中拥有本地化地址,以及用于与遗留系统通信或独立使用脚本的ASCII格式"…当做。

继续:关于国际电子邮件地址的RFC很可能在成为新标准之前被更改。因此,在进行中实施这项工作是没有意义的。恕我直言。

@简:你不明白我的意思。电子邮件预验证不会给您或用户带来任何附加值。如果您的regexp不正确(请参阅我的答案中的链接),您无法判断电子邮件地址是否真实,是否格式正确(因此它根本无法保护您免受垃圾邮件的侵害),并且用户有(非常小,但仍然存在)被拒绝的合法电子邮件地址的机会。

请阅读关于头部注射与电子邮件了解我在说什么。

我很抱歉。。。Regexp的电子邮件验证是如何阻止头段注入的?

function check_email($check) {

$expression ="/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.([a-zA-Z]{2,4})$/";

if (preg_match($expression, $check)) {

return true;

} else {

return false;

}

}

在if()条件中调用它,如下示例:

if(!check_email($_REQUEST['ContactEmail'])){

$register_error ="Enter the correct email address!
";

$reg_error=1;

}

有人能告诉我这段代码中的问题是什么吗?它工作得很好。

不是我投了反对票,而是……这不是正确过滤电子邮件地址的正确方法,在这里可以找到正确和完整的regex an:ex parrot.com/~pdw/mail-rfc822-address.html其次使用php内置过滤器_validate_email将是正确/最好的过滤电子邮件地址的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值