我在寫一個PHP腳本,它接受preg_match()使用的用戶的正則表達式模式。我如何檢查模式是否有效?如何捕獲無效的preg_match模式?
回答
只是測試它。如果模式無效,則 preg_match()
將返回FALSE
。
返回值:preg_match()返回模式匹配次數 。 這將是0次(不匹配) 或1次,因爲preg_match()將在第一次匹配後停止搜索。 preg_match_all()相反將 繼續,直到它到達 主題的末尾。 如果 發生錯誤,preg_match()返回FALSE。
按照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
您可能不需要在生產環境中的錯誤彙報位 - 這取決於你的設置。
if (preg_match($regex, $variable)) {
echo 'Valid';
}
else {
echo 'InValid';
}
您必須使用preg_match(...)!== false來檢查它,因爲如果它有效但它會返回0不匹配 – mck89 2010-09-14 15:44:11
您應該與FALSE進行比較:if(preg_match($ regex,$ variable)!== FALSE){'。該模式可以是有效的,沒有匹配。請參閱[文檔](http://nl2.php.net/manual/en/function.preg-match.php) – Lekensteyn 2010-09-14 15:44:36
不要使用@,在preg_match
之前使用反斜槓在較新版本的PHP(5.3+?)中拋出異常。
tr{
if (\preg_match($regex, $variable)===false)
echo 'Valid';
else
echo 'InValid';
}
catch(Exception $e) {
echo $e->getMessage(); die;
}
反斜槓只是指全局名稱空間。否則它什麼也不做,甚至不改變錯誤行爲。 – 2017-09-21 14:35:14
- 1. preg_match捕獲意外的子模式
- 2. PHP的preg_match正則表達式的字符串捕獲模式
- 3. 如何從preg_match獲取命名捕獲?
- 4. 如何捕獲無效的Elasticsearch查詢?
- 5. PHP的preg_match,如何捕獲只命名的正則表達式?
- 6. 捕獲無約束的重複模式
- 7. preg_match不捕獲內容
- 8. preg_match捕捉週期\。在非捕獲組
- 9. 的preg_match +多模式
- 10. 無效捕獲過濾器
- 11. NSExpression捕獲無效參數
- 12. 無模式MsgBox,錯誤捕獲,。找到
- 13. 如何在angularjs中捕獲ng模式
- 14. 如何將多個子模式捕獲到一個捕獲?
- 15. Preg_match無論如何
- 16. Python - 我如何捕獲chown的錯誤。 chown:無效的用戶
- 17. 正則表達式問題:名字捕獲,的preg_match
- 18. 捕獲無效的xml錯誤消息
- 19. 捕獲無效的文件路徑
- 20. 捕獲getopt的無效選項
- 21. NSRegularExpression捕獲部分無效的JSON
- 22. SSIS:捕獲無效的Zip文件
- 23. 捕獲所有無效的網址
- 24. 幾種模式的preg_match
- 25. PHP的preg_match模式問題,
- 26. PHP的preg_match特殊模式
- 27. 的preg_match匹配模式
- 28. 使用請求模塊捕獲無效的URL預重定向
- 29. 如何獲得只的preg_match
- 30. xsd模式無效?
+1用於提及錯誤消息輸出抑制。 – Gumbo 2010-09-14 15:44:37
你知道,它不禁止使用'@':p – Artefacto 2010-09-14 16:06:43
應該是'if($ match === false)' – webbiedave 2010-09-14 17:55:12