【问题标题】:Form field Validation custom email requirements表单字段验证自定义电子邮件要求
【发布时间】:2013-10-13 04:29:50
【问题描述】:

希望在电子邮件文本字段上创建表单验证。 以前使用过验证来确保生成正确的电子邮件。

但这里希望创建一个更自定义的规则,仅允许以 .ac.uk 格式结尾的电子邮件

在这里,用户可以提供任何大学/学院/机构,只要字符串中的最后 6 个字符 = .ac.uk,邮件的一般格式如下:email@university.ac.uk

最好在 PHP 中解决,目前正在考虑在此语句中使用结尾部分的规则:

^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$

使这部分*(\.[a-z]{2,3}).ac.uk 相关

非常感谢,非常感谢 让克劳德

【问题讨论】:

  • 您的问题到底是什么?您希望我们编写满足您要求的电子邮件验证器吗?

标签: php regex validation email


【解决方案1】:

我会首先通过filter_var($email, FILTER_VALIDATE_EMAIL) 运行电子邮件,而不是使用简单的正则表达式。它并不完美(我发现了一些无法正确验证的边缘案例),但效果很好。一旦您知道这是一个有效的电子邮件地址,您就可以信任substr($email, -6) == '.ac.uk' 并完成它。比如:

if (filter_var($email, FILTER_VALIDATE_EMAIL) 
    && strtolower(substr(trim($email), -6))) === '.ac.uk') {

    // Valid
}

【讨论】:

  • (FILTER_VALIDATE_EMAIL 在内部也实现为正则表达式。)
  • 哦,这很有趣。我假设它是那些极其复杂的正则表达式之一。我仍然相信它而不是我经常看到使用的平均正则表达式,比如这篇文章中的那个。
  • 确实是:github.com/php/php-src/blob/master/ext/filter/… 当然还有more elaborate ones,完全覆盖了rfc2822。但这对于大多数情况来说已经足够了。
  • 好的,谢谢,我将使用 substr($email, -6) == '.ac.uk' 尝试这种方法,看看它是如何工作的。
猜你喜欢
  • 2019-02-02
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 2013-10-31
相关资源
最近更新 更多