2009-09-03 156 views
15

可能重複:
How can I convert ereg expressions to preg in PHP?如何更改PHP的eregi到的preg_match

我需要幫助,下面是一個小的非常基本的正則表達式有些驗證電子郵件,我不知道它不是最大的工作,但爲我的需要,現在可以。

它目前使用PHP的eregi功能這php.net說,現在是一個貶值的功能,我應該使用的preg_match代替,簡單地更換的preg_match erei不起作用,有人可以告訴我怎麼做工作?

function validate_email($email) { 
    if (!eregi("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $email)) { 
     echo 'bad email'; 
    } else { 
     echo 'good email'; 
    } 
} 
function validate_email($email) { 
    if (!preg_match("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $email)) { 
     echo 'bad email'; 
    } else { 
     echo 'good email'; 
    } 
} 
+0

注意,你不應該使用這個正則表達式驗證電子郵件;它嚴重過時了。 – Piskvor 2014-10-22 15:33:42

+0

@Piskvor我同意,這個問題也是近5年= =)你應該發佈更新的答案,如果你喜歡,我總是可以改變「選擇」的答案,最好的辦法 – JasonDavis 2014-10-22 16:02:43

+0

它的恕我直言,範圍以外的ereg/preg問題;評論對我來說似乎就足夠了。 – Piskvor 2014-10-22 16:40:44

回答

25

Perl風格的正則表達式模式總是需要分隔。字符串中的第一個字符被認爲是分隔符,所以是這樣的:

function validate_email($email) { 
    if (!preg_match("/^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i", $email)) { 
     echo 'bad email'; 
    } else { 
     echo 'good email'; 
    } 
} 

(顯然)找到了原因您最初的嘗試沒有成功,是因爲它試圖用^作爲分隔符,但沒有匹配^爲正則表達式的結尾。

+0

謝謝,我剛剛發現了php的FILTER_VALIDATE_EMAIL,好像它可能是最好的方式,但我找不到很多關於它的信息 – JasonDavis 2009-09-03 17:47:13

+2

@jasondavis,'FILTER_VALIDATE_EMAIL'肯定是更好的選擇。電子郵件**複雜**。 – TRiG 2011-06-27 14:59:00

10

你需要改變的三件事

  1. 需要添加圖案分隔符(可以是任何字符,但最常用的是正斜槓)
  2. [[:alnum:]]將需要更換與PCRE等效
  3. 「eregi」中的「i」表示不區分大小寫,PCRE用標誌執行,具體爲i標誌。

否則,其餘的看起來PCRE兼容(是的,這是一種多餘= P)

"/^[a-z0-9][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$/i" 
+1

PHP的PCRE包含諸如[:alnum:]之類的選項。 – Amber 2009-09-03 17:50:39