@符号前的电子邮件地址的正则表达式

时间:2014-12-17 14:23:54

标签: php regex

我想要一个正则表达式来检查用户电子邮件地址的第一部分(在@符号之前)。

只有字符数字和“。”符号是有效的。我尝试了一些但是还不够。

这是我的表达,但问题是用户可以提交多个点,例如“example..test”,“ex ... amp..le”。

"/^[a-zA-Z0-9.]+$/"

编辑:我不想允许下划线或类似的内容。

4 个答案:

答案 0 :(得分:2)

您的具体案例

要禁止重复的字符,可以使用否定断言:

if (preg_match('/(?!.*\.\.)^[a-z0-9.]+$/', $inbox_name)) {
    // valid, probably
}

这允许将句点作为第一个字符,但在电子邮件地址中是不允许的,因此您必须进一步优化它:

if (preg_match('/(?!.*\.(\.|$))^[a-z0-9][a-z0-9.]*$/', $inbox_name)) {
    // valid, probably
}

说明:

  1. 不允许一段时间,然后是另一段时间或一段时间;
  2. 字符串必须以字母或数字开头;
  3. 起始字符后面可以跟字母,数字或句号。
  4. 旧答案

    使用filters而非尝试推送自己的电子邮件地址验证:

    var_dump(filter_var('ex..ample@example.org', FILTER_VALIDATE_EMAIL)); 
    // bool(false)
    
    var_dump(filter_var('ex.ample@example.org', FILTER_VALIDATE_EMAIL)); 
    // string("ex.ample@example.org")
    

    之后,在您尝试发送电子邮件之前,您仍无法保证电子邮件地址确实有效(即便如此,这可能是误报)。

      

    我不想允许下划线或类似的东西。

    这种说法只是荒谬的;它们在电子邮件地址中有效,您实际上没有理由阻止它超出个人喜好。

答案 1 :(得分:1)

^(?=[^.]*\.[^.]*$)[a-zA-Z0-9.]+$

你可以试试这个。这只允许一个.

$re = "/^(?=[^.]*\\.[^.]*$)[a-zA-Z0-9.]+$/m";
$str = "asdasd.asdasd.\nasdsad.asdasd\nasdsadsad.asdasd.sa.d.";

preg_match_all($re, $str, $matches);

答案 2 :(得分:0)

试试这个:

"/^[a-zA-Z0-9]+(\.[a-zA-Z0-9_-]+)*$/"
必须支持

Hyphensunderline,并且电子邮件必须首先以alphanumeric character开头。

答案 3 :(得分:0)

你可以试试这个

'/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/'

以下是一些输出:

$a = "sf..sf@g.com"
var_dump( preg_match('/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/', $a));
int(0)
$b = "sf.sf@g.com";
var_dump( preg_match('/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/', $b));
int(1)
$c = "sff.@g.com";
var_dump( preg_match('/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/', $c));
int(0)
$d = "sff..@g.com";
var_dump( preg_match('/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/', $d));
int(0)
$e = "adeade@g.com";
var_dump( preg_match('/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/', $e));
int(1)
$f = "a.b.c@g.com";
var_dump( preg_match('/^[a-zA-Z0-9]+\.?[a-zA-Z0-9]+@/', $f));
int(0)