2014-02-21 148 views
1

我最近更新到PHP 5.3,並得到了一些不贊成的錯誤。preg_match()[function.preg-match]:未知的修飾符'@'

Warning: preg_match() [function.preg-match]: Unknown modifier '@' in 

首先我想提一下,我已經檢查了以前的鏈接並嘗試了建議的內容。

preg_match(): Unknown modifier '@'How can I convert ereg expressions to preg in PHP?

...但是,當我沒有進行更改,從

function check_email_address($email) { 

if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) { 

function check_email_address($email) { 

if (preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) { 

,也試過

if (preg_match('/^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$/i', $email); 

我的註冊頁面不接受電子郵件,並說有無效的電子郵件。

但與此同時警告"Unknown modifier '@'"已經消失。

所以有些東西是對的,但仍然有點不對。只需要一點幫助。

任何建議或提示?

+2

請勿使用正則表達式來驗證電子郵件。使用'filter_var()'函數代替:'if(filter_var($ email,FILTER_VALIDATE_EMAIL)){// valid email}' –

+0

[PHP使用preg \ _replace:「分隔符不能是字母數字或反斜槓」錯誤。 (http://stackoverflow.com/questions/2527657/php-using-preg-replace-delimiter-must-not-be-alphanumeric-or-backslash-error) – Toto

回答

3

您可以使用PHP的內置filter_var()

function check_email_address($email) { 
    return filter_var($email, FILTER_VALIDATE_EMAIL) ? true : false; 
} 
if(!check_email_address($_POST['email'])) 
    exit("Invalid email address"); 

或者乾脆:

if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) 
    exit("Invalid email address"); 
+0

謝謝!去看看是否有效。 –

+1

工程就像一個魅力! –

+0

樂意幫忙:) – Magictallguy

2

「未知修改」的問題,當你使用preg_match是由於不使用分隔符第一次開始。 PHP中的preg_ *函數查找分隔符(通常爲/)以開始和結束正則表達式。分隔符是你用作第一個字符的任何東西。在preg_match("^[^@]{1,64}@[^@]{1,255}$", $email)中,分隔符是^,所以正則表達式是前兩個^之間的所有內容。這意味着第二個^之後的所有內容(包括@)都被視爲修飾符。這就是爲什麼添加斜槓幫助。因爲你在if聲明留出了!

你修改後的代碼拒絕的有效電子郵件:

if (!preg_match('/^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$/i', $email); 

正如其他人都指出,filter_var($email, FILTER_VALIDATE_EMAIL)一個更簡單,更不易出錯的方式來過濾電子郵件地址,不管怎樣。

+0

現在就試試看。謝謝! –

+0

小修正:'ereg()'不使用分隔符,但是由於它不推薦使用而在意嗎? – HamZa

+1

@HamZa好點。發佈的OP錯誤來自使用preg_match,但我忘了修復那些我複製並粘貼的OP代碼。 –

相關問題