我正在研究的一个开源cms使用以下正则表达式来验证电子邮件:
valid_regex=^[_a-z0-9-]+(.[_a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)(.[a-z]{2,3})$
和我还需要验证电子邮件地址的长度之前的"@"符号接受至少2个字符的电子邮件。我已经读到,使用{2,}将做到这一点,但我应该在哪里以及如何使用它?......
要验证电子邮件,不要使用正则表达式。而不是使用
if (filter_var($input, FILTER_VALIDATE_EMAIL) !== false) {
如果您仍然想要验证@之前的长度,一个简单的
if (strpos($input, '@') < 2) {
应该足够了。
您的正则表达式已经强制电子邮件在@之前至少有2(或者更确切地说3)个字符。
[_a-z0-9-]+(.[_a-z0-9-]+)
^ ^
在这两种情况下,您都使用+
符号,这些符号表示下面的字符应该重复1次或多次。注意,这个正则表达式不能匹配几个有效的电子邮件地址,并且有很多其他问题。
对于初学者,您应该使用反斜杠'.
转义每个点,并且现在强制所有地址只有一个点。
一个简单的解决方案是使点在当前正则表达式中是可选的:
[_a-z0-9-]+('.?[_a-z0-9-]+)+
我猜你不会真的想把地址限制在只有一个点。如果你想这样做,只需删除最后一个加号。
您可以在这里看到它的作用:http://regexr.com?2vbof
我建议使用这个极其复杂且经过彻底测试的RegEx来验证电子邮件地址:
http://fightingforalostcause.net/misc/2006/compare-email-regex.php