2013-03-06 40 views
1

如何限制电子邮件地址仅限于.edu,在以下代码中?限制电子邮件地址仅限于一个顶级域名(TLD)?

function ValidateEmail($email) { 
    global $debug; 
    if($debug) 
     return TRUE; 
    else 
     return preg_match("/^[^\s][email protected][^\s]+.[^\s]+$/", $email); 
} 
+0

@DannyBeckett:操作系统试图与'preg_match(“/^[^ \ s] + @ [^ \ s] +。[^ \ s] + $ /”,$ email);'而且他只想在最后匹配电子邮件.edu!没什么不好的! – 2013-03-06 06:24:50

回答

4

PHP 5.2或以上的检查与此代码

function validateEmailAddress($email) { 
    return filter_var($email, FILTER_VALIDATE_EMAIL) && preg_match('/@.+\.edu/', $email); 
} 
+2

,因为它是一个语法上有效的电子邮件,为什么不把最终测试看作是“&& preg_match('/ \。edu $ /',$ email)”呢? – 2013-03-06 06:30:25

+1

我喜欢的方法,但不是正则表达式。 :应该使用P''/ \。edu $ /''代替 – 2013-03-06 06:31:43

0

好了,你的正则表达式验证任何电子邮件是非常原始和不完整的,但假设这是对你不够好,你只需要添加“ .edu“,而不是[^ \ s] +,像这样:

return preg_match("/^[^\s][email protected][^\s]+\\.edu$/", $email); 
0

我是reg表达式的新手。但是你可以看到有这个区块后的时间段:[^\s]+。胡萝卜(^)指的不是,\ s指的是空格(制表符,换行符,空格),并且+表示匹配这些字符的无限制,直到到达正则表达式的下一部分(恰好是结尾)。这意味着在电子邮件域中的.之后,您的脚本将匹配无限非空白字符。这意味着[email protected][email protected]都可以工作,但[email protected] om不会。替换这个[^\s]+edu应该工作。

function ValidateEmail($email) { 
    global $debug; 
    if($debug) 
     return TRUE; 
    else 
     return preg_match("/^[^\s][email protected][^\s]+.edu$/", $email); 
} 

如果这不起作用(因为我在regexp上很穷),我会合并PHP的substr()。

function ValidateEmail($email) { 
    global $debug; 
    if($debug) 
     return TRUE; 
    else { 
     if(substr($email,-4) != '.edu')) 
      return false; 
     else // ends in .edu, check for valid email 
      return preg_match("/^[^\s][email protected][^\s]+.[^\s]+$/", $email); 
    } 
} 
0
preg_match("/^[^\s][email protected][^\s]+.[^\s]+$/", $email); 

在这个模式中,.edu的应放置在图案的端部:

preg_match("/^[^\s][email protected][^\s]+(.[^\s]+)*(\.edu)$/", $email); 
0

检查了这一点

function ValidateEmail($email) { 

    if(filter_var($email, FILTER_VALIDATE_EMAIL) && (substr($email ,-4) == ".edu")){ 
     return true; 
    }else{ 
     return false; 
    } 

} 
相关问题