【发布时间】:2012-05-27 06:47:37
【问题描述】:
尝试创建用于电子邮件地址检查的正则表达式模式。这将允许一个点 (.),但如果有多个彼此相邻,则不允许。
应该匹配: test.test@test.com
不应匹配: test..test@test.com
现在我知道互联网上有成千上万的电子邮件匹配示例,所以请不要向我发布完整解决方案的链接,我正在尝试在这里学习。
其实我最感兴趣的只是本地部分: 应该匹配的 test.test 和不应该匹配的 test..test。 感谢您的帮助。
【问题讨论】:
-
规范定义了你应该如何匹配它tools.ietf.org/html/rfc2822#page-17。以这种方式构建健壮的正则表达式比在这里使用只关注 2 个点的问题的临时解决方案要容易得多
-
实际上我正在经历那个规范......并且遇到了我的第一个障碍,试图学习匹配一个点但不是两个或多个彼此相邻的正则表达式。
-
好吧,它说本地部分是点原子或引用的字符串,然后您查找点原子是什么,它是 1 个原子文本,后跟一个点和另一个原子文本。这自动是一个正则表达式,它取消以点开头、以点结尾或中间有两个或多个连续点的字符串的资格。为简单起见,假设 atomtext 只是字符 a-z。那么只允许点原子的局部部分是:
/^([a-z](?:\.[a-z])*)+$/
标签: php regex pattern-matching