2010-09-14 73 views

回答

5

只是測試它。如果模式無效,則 preg_match()將返回FALSE

返回值:preg_match()返回模式匹配次數 。 這將是0次(不匹配) 或1次,因爲preg_match()將在第一次匹配後停止搜索。 preg_match_all()相反將 繼續,直到它到達 主題的末尾。 如果 發生錯誤,preg_match()返回FALSE。

8

按照docs

的preg_match()返回FALSE如果發生了錯誤。

問題是它也會發出警告。

解決此問題的一種方法是抑制錯誤消息的輸出,捕獲返回值並使用error_get_last()輸出錯誤(如果錯誤)。

喜歡的東西

$old_error = error_reporting(0); // Turn off error reporting 

$match = preg_match(......); 

if ($match === false) 
{ 
    $error = error_get_last(); 
    echo $error["message"]; 
} 

error_reporting($old_error); // Set error reporting to old level 

您可能不需要在生產環境中的錯誤彙報位 - 這取決於你的設置。

+0

+1用於提及錯誤消息輸出抑制。 – Gumbo 2010-09-14 15:44:37

+1

你知道,它不禁止使用'@':p – Artefacto 2010-09-14 16:06:43

+0

應該是'if($ match === false)' – webbiedave 2010-09-14 17:55:12

0
if (preg_match($regex, $variable)) { 
    echo 'Valid'; 
} 
else { 
    echo 'InValid'; 
} 
+1

您必須使用preg_match(...)!== false來檢查它,因爲如果它有效但它會返回0不匹配 – mck89 2010-09-14 15:44:11

+0

您應該與FALSE進行比較:if(preg_match($ regex,$ variable)!== FALSE){'。該模式可以是有效的,沒有匹配。請參閱[文檔](http://nl2.php.net/manual/en/function.preg-match.php) – Lekensteyn 2010-09-14 15:44:36

0

我以爲我在MRE中看到過這種方法;原來這是弗裏德自己寫的。這是listing

-1

不要使用@,在preg_match之前使用反斜槓在較新版本的PHP(5.3+?)中拋出異常。

tr{ 
    if (\preg_match($regex, $variable)===false) 
     echo 'Valid'; 
    else 
     echo 'InValid'; 
} 
catch(Exception $e) { 
    echo $e->getMessage(); die; 
} 
+0

反斜槓只是指全局名稱空間。否則它什麼也不做,甚至不改變錯誤行爲。 – 2017-09-21 14:35:14