的preg_match停止執行代碼這裏的問題: 這行代碼PHP沒有錯誤
preg_match("/^([^<>}{\|])+$/", "Testing bla di bla and more stupid text text text")
完全停止我的腳本。 如果我把最後一個「文本」從它中拿出來,它會起作用並給我一個結果。
原代碼是不是我的,我不擅長用正則表達式,但這個想法是檢查以下任何特殊字符在文本:
^ < > { } \ |
在我的搜索,我發現一些關於PREG_RECURSION_LIMIT_ERROR
,但將其設置爲10000並沒有改變任何東西。 preg_last_error()
也沒有幫助,因爲腳本只能在輸出或記錄任何內容之前停止。 PHP錯誤日誌中沒有任何內容。
我有兩個問題:
- 爲什麼它只是停止沒有任何通知?
- 是否有更好的方法來編寫可能不會導致此問題的正則表達式模式?
謝謝!
PS:我正在運行PHP 5.2.9版本,其目的是爲了防止特殊字符被保存,所以我想檢測它們的存在並拒絕提交的文本。
什麼是-1?我不只是要求正則表達式的幫助,但我有我認爲沒有錯誤記錄的合法技術問題,並且我至少已經完成了一些研究,如我所述...... – semmelbroesel
您可以嘗試PHP的filter_var()。 http://php.net/manual/en/function.filter-var.php我不知道它的速度。如果你知道這只是文本,那麼其中一個ctypes也可能有幫助。也許這個正則表達式'[\^<> \} \ {\ |] +'會很有用。留下前導'^'和尾部'$'將使它只匹配符號,如果它們是匹配的短語的開始和結尾。 – asafreedman
_「爲什麼它只是在沒有任何通知的情況下停下來?」_這意味着你會造成一個致命的錯誤。定義error_reporting和error_log不是在你的腳本中,而是在更早的時候(.htaccess,webserver config,php.ini),它會記錄它遇到的致命錯誤。 – Wrikken