2009-11-16 22 views
0

爲什麼PHP中的某些函數(如eregi)不推薦使用?我通常使用eregi進行電子郵件驗證。棄用函數的用法

我應該使用它還是在那裏可以使用另一個功能?

+0

非常感謝所有他的答案,但我想第一部分保持仍然無人應答......如果事情做工精細與特定的載體作用..爲什麼人覺得有必要貶低其他it..or西隧的問題可能已經被竊聽,使他們做到這一點.. – Sachindra 2009-11-16 10:38:38

+0

@ sachindra149,看到我的答案的傢伙。 – 2009-11-16 10:47:22

+0

謝謝你的答案... – Sachindra 2009-11-16 11:01:52

回答

5

如上所述,您不應該使用eregi或任何其他棄用函數,因爲它們已在下一版本的PHP中被刪除。

查看the preg* functions基於PCRE(Perl兼容正則表達式)的替代方案(preg_matchpreg_match_all是需要電子郵件驗證的功能)。 eregi *函數是基於posix的正則表達式,所以PCRE的語法略有不同,但它不是一個重大變化。

爲什麼一個函數會被棄用? Wikipedia建議:

  • 該功能已被更強大的替代功能取代。
  • 該功能被認爲是無關的,將來會被刪除以簡化整個系統。
  • 該軟件的未來版本計劃進行重大結構更改,這使得支持舊功能變得不可能(或不切實際)。
  • 命名中的標準化或增加的一致性
  • 該功能包含設計缺陷 - 經常出現安全缺陷 - 因此應該避免,但現有代碼依賴於它。
0

不應使用不推薦使用的函數;這是因爲,儘管它們在當前版本的解釋器中正常工作,但它們可能(並且將會)從未來的版本中完全移除。所以如果你在舊項目中使用它們,你可能會留下它們(但是當你遷移到一個新的php版本時你的項目可能會中斷)。

但絕對不要在新項目中使用它們。

0

它的用法是正確的,但不推薦使用。這意味着在將來的PHP版本中,此方法可能會被刪除。這可能是由於安全性,冗餘或其他原因。通常還有其他方法可以用來代替這些方法(例如eregi - > preg_match)

0

如果希望腳本向前兼容,則不應使用棄用的函數。他們現在工作,但未來可能無法工作。或者,更糟糕的是,他們提出了一個嚴重的錯誤,這個錯誤不能被固定地修復,但是需要修改一個更大的變化,而修復單個函數是無法解決的。

在你的情況,eregi將被從PHP 6中刪除,你的腳本將會失敗。改爲使用preg_match()preg_match_all()

5

eregeregi已棄用,因爲它們不適用於Unicode。

在回答問題"Why is ereg being deprecated?"Rasmus Lerdorf是這樣說的:

真正的答案是,有沒有 Unicode支持在額日格功能, 和喜歡還是不喜歡,這個世界是怎麼回事 Unicode。

請參閱PHP-DEV郵件列表上的the discussion

0

正如其他人所說,你不應該使用過時的功能,並在預浸料的功能看,而不是。

專門用於電子郵件驗證,如果您的Web應用程序將運行在PHP 5.2及更高版本的服務器上,則可能需要查看PHP的filter(特別是filter_var)函數。過濾器函數也可用於URL驗證和驗證IP地址等。

0

只要使用preg_match以「我」修飾

echo eregi('[\w\.-_][email protected][\w\.-_]+\.([a-z]{2,3})', $email) ? 'correct' : 'wrong'; 
echo preg_match('#[\w\.-_][email protected][\w\.-_]+\.([a-z]{2,3})#i', $email) ? 'correct' : 'wrong';