2013-03-11 67 views
0

需要正则表达式将检测[email protected]正则表达式来之前@检测的电子邮件地址段

([a-z0-9A-Z])@domain.tld

有效检测不到:[email protected]

无效:[email protected]

我认识一个周期合法地在电子邮件地址@之前,但需要检测该条件。

+0

[a-z0-9A-Z] + \。[a-z0-9A-Z] + @ domain.tld – user1937198 2013-03-11 22:05:08

+4

测试* invalid * emails by your req:'\ .. * @' – 2013-03-11 22:12:35

+0

还有什么我们可以为你做的吗? [你有什么尝试?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – Herbert 2013-03-11 22:12:37

回答

0

\.(?=.*@)应该这样做。

+0

我很好奇为什么你会在这里使用lookahead。 – jrajav 2013-03-11 22:07:39

+0

我用前瞻来捕捉“。”实例出现在“@”之前,但实际上在我的匹配中没有包含“@” – Daedalus 2013-03-11 22:08:24

+0

这个正则表达式只用于检测真/假匹配,据我所知,所以没有必要排除'@' – jrajav 2013-03-11 22:10:34

2

假设你已经确认这是一个正确的邮箱地址:

\..*@

这意味着:一个.,那么的0个或更多字符序列,然后@

+0

那里你去:)没有滚动像@sputnik答案是*有点长* – 2013-03-11 22:16:58

1

你不需要正则表达式,只需比较期间对at符号的位置:

// assuming there's already an `@` in $email 
if (($p = strpos($email, '.')) !== false && $p < strpos($email, '@')) { 
    echo 'invalid'; 
} 

如果电子邮件地址中没有@,则不会打印'invalid',因为任何整数都不会严格小于false

相关问题