2014-04-10 58 views
1

我知道有很多與此主題相關的問題,但經過幾天的研究,我沒有找到可以幫助解決這個問題的東西,所以在這裏是:Eregi和preg_match替換,capcha和電子郵件驗證器上的大錯誤

我更換了的preg_match棄用eregi在我的網站上的2個文件,現在CAPCHA代碼給出了註冊頁面上的錯誤,即使代碼是完全正確的

在註冊頁面我已取代此

function is_valid_username($username) { 
    if(!eregi("^[a-z0-9]*$", trim(str_replace(" ","",$username)))) { 
     return 0; 
    } 

if(!preg_match("^[a-z0-9]*$^", trim(str_replace(" ","",$username)))) { 
    return 0; 
} 

而在我的第二個文件我已經取代了這一點:

if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email)) { 
    $result = 0; 
} 

與此

if(!preg_match("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$^", $email)) { 
    $result = 0; 
} 

我怎樣才能解決這個問題?

+0

[Convert deprecated eregi/ereg/ereg \ _replace to preg \ _match or other equivalent](http://stackoverflow.com/questions/10931963/convert-deprecated-eregi-ereg-ereg-replace-to -preg-match-or-other-equivalent) – Toto

+0

供參考:TLD不限於4個字符長度,請參閱:http://data.iana.org/TLD/tlds-alpha-by-domain.txt – Toto

回答

1

eregi不區分大小寫,因此您需要將i修飾符添加到preg_match表達式的末尾。

另外,^表示輸入的開始,您已將它用作delimiter

所以這應該是更像原來的:

#^[a-z0-9]*$#i 

#^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$#i 

順便說一句,我不知道你的圖形驗證碼需要究竟是什麼,但也有更簡單的方法使用filter_var()驗證電子郵件地址。

+0

謝謝,我已根據建議取代它們,但結果相同 –

+0

@KlaussGekker您提供的代碼和我修改的代碼與驗證碼無關,但與用戶名和電子郵件無關,因此驗證碼的錯誤可能在其他位置。 – jeroen

+0

我現在已經注意到,它不會給錯誤,如果我離開captcha字段emtpty ...奇怪.. –