通过电子邮件定期表达乐趣; 它应该是不需要的顶级域名

can*_*eed 0 php regex

我正在尝试创建一个正则表达式,它将使用PHP过滤有效的电子邮件,并遇到了一个与我对正则表达式的理解相冲突的问题.这是我正在使用的代码.

if (!preg_match('/^[-a-zA-Z0-9_.]+@[-a-zA-Z0-9]+.[a-zA-Z]{2,4}$/', $string)) {
return $false;
}
Run Code Online (Sandbox Code Playgroud)

现在从我研究的材料中,这应该允许@之前的内容是多个字母,数字,下划线和句点,然后允许多个字母和数字,然后需要一个句点,然后需要两到四个字母作为顶部级域名.

但是,现在它忽略了拥有顶级域部分的要求.例如,@ bc显然是有效的(并且应该是),但是@ b也返回有效,我希望ti被标记为不是这样.

我确定我错过了一些东西,但在谷歌浏览了一个小时之后,我不知道它可能是什么.任何人都有这个难题的答案吗?

编辑:答案到达的速度使这个网站优于其竞争对手.做得好!

Tho*_*ens 5

您可以在Regular-Expressions.info上阅读文章如何查找或验证电子邮件地址,而不是滚动自己.本文还讨论了您可能不希望使用正则表达式验证电子邮件地址的原因,并提供了您可能考虑使用的3个正则表达式而不是您自己的表达式.


Iva*_*uev 5

.当它不是小组的一部分时你应该逃脱:'/^[-a-zA-Z0-9_.]+@[-a-zA-Z0-9]+\.[a-zA-Z]{2,4}$/' 否则它将等于任何字母:

  • .- 任何符号(\n如果不使用s修饰符,则不是换行符)
  • \. - 点符号
  • [.] - 点符号(符号组内)