2010-09-01 88 views
0

我在嘗試使用preg_match(或eregi())驗證電子郵件地址時遇到了一些問題,如果它更合適的話)。我已經嘗試了幾種正則表達式模式,無論我做什麼似乎都不起作用。PHP - preg_match()和eregi()不工作?

這裏的功能:

function validateEmail($email) { 

    if(eregi('[a-z||0-9]@[a-z||0-9].[a-z]', $email)){ 
     return true; 
    } 

} 

任何想法有什麼不對?我已經嘗試在eregi(和之前使用的preg_match)之前放置一個感嘆號,並且將其全部逆轉(如預期的那樣),但仍未使其正常工作。如果它不傳遞正則表達式,我希望它返回TRUE。

而我在preg_match函數時沒有使用相同的正則表達式,於是我發現了另一個正則表達式,因爲我知道你不能混合這兩個。對?

在此先感謝!

+0

這不是一個正確的正則表達式。 '[]'只匹配一個字符,'.'被視爲匹配*任何*字符的特殊字符,而不是'.'。一個更正確的正則表達式可能是:'[a-z0-9] + @ [a-z0-9] + \。[a-z] {2,4}',儘管如此nikic所說的也太嚴格了。 – Frxstrem 2010-09-01 14:09:58

+0

你的正則表達式也不起作用,所以我不認爲這是正確的正則表達式。 – Nike 2010-09-01 14:15:40

回答

8

你應該通過filter_var使用過濾擴展功能:

filter_var($email, FILTER_VALIDATE_EMAIL); 

如果你想有一個正則表達式,不要使用嚴格的規則,或者我[email protected]域名將被拒絕。使用類似~[^@][email protected](?:[^.]+\.)+[A-Za-z]{2,6}~的東西。雖然這仍然不允許有效的電子郵件,如"\@"@example.org

PS:如果你想知道爲什麼你的正則表達式不起作用:

  • eregi已過時,使用的preg_match代替
  • []不寫||。只需使用[a-z0-9]即可。 ||只需另外允許|字符
  • 您忘記了量詞到處都是+。知道每個部分可能只有一個字符。

與所有這些東西固定的(但請不要使用這個表達式!):

preg_match('~[a-z0-9][email protected][a-z0-9]+.[a-z]+~i', $email); 
+0

我甚至不知道存在,但聽起來不錯。但由於某些原因,它仍然不起作用。 – Nike 2010-09-01 14:11:24

+0

究竟是不行的? – NikiC 2010-09-01 14:12:59

+0

無論我輸入什麼,它都會返回false。我可以留空並提交表單,但它仍然返回false。如果我輸入有效的電子郵件,也是如此。如果我在preg_match之前放了一個感嘆號,它會顛倒這個動作並且無論您提交什麼都會返回true。 – Nike 2010-09-01 14:16:45

2

只是爲了澄清一些東西,ereg折舊。

要轉換到preg_match這將是:

if(preg_match('/[a-z||0-9]@[a-z||0-9].[a-z]/', $email)){ 

大多數(我用這個詞鬆散)ereg的剛需分隔符(第一個和最後一個/)添加到轉換爲preg_match

+0

非常感謝,很高興知道。 :) – Nike 2010-09-01 14:17:06