2013-03-06 37 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; 
    } 

} 
相關問題