用于验证'@'之前的电子邮件长度的正则表达式


Regex for validating email length before '@'

我正在研究的一个开源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