【问题标题】:Email validation - What is wrong with my regex code?电子邮件验证 - 我的正则表达式代码有什么问题?
【发布时间】:2013-05-11 14:22:15
【问题描述】:

我正在尝试使用 preg_match 验证电子邮件地址..

但是我收到了这个错误..

警告:preg_match():未知修饰符'+'

这是我的代码

preg_match("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", $email, $matches);

谁能告诉我我的正则表达式有什么问题?

谢谢

【问题讨论】:

  • 我强烈建议您不要自己编写此代码。 code.google.com/p/php-email-address-validation/source/browse/…
  • 即使space 是电子邮件中的有效字符。要点是不要使用正则表达式来解析电子邮件。就像.*@.* 这样简单就可以了
  • 您可以在 @ 的右侧进行更严格的限制,它必须是一个有效的域名,但是是的,几乎所有内容都在左侧。

标签: php regex preg-match


【解决方案1】:

当您使用preg_match 时,您需要在正则表达式周围放置分隔符。标准是/。如果在表达式中使用分隔符,则必须对其进行转义。

preg_match("/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/", $email, $matches);

你也可以考虑使用

filter_var($email, FILTER_VALIDATE_EMAIL);

【讨论】:

  • 另外,(?:[a-z0-9-]*[a-z0-9])? 这些表达式有点奇怪。为简单起见,大概可以将它们替换为[a-z0-9-]*?
  • @BoristheSpider 我认为应该是[a-z0-9-]+? :)
  • @HamZaDzCyber​​DeV 我不这么认为,因为+ 至少需要一个非捕获组中的构造,后跟?,这意味着它是可选的(需要零或一time) - 所以表达式是说[a-z0-9-] 零次或多次(即*)。再三考虑,我什至不确定 ? 是必需的 - 表达式可能很贪婪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 2020-08-11
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
相关资源
最近更新 更多