Unicode正規表現 - 343文字で失敗します
-
02-10-2019 - |
質問
以下の正規表現を使用して、ラチン以外の文字を取り除いています。その結果、342文字を超える文字列を使用すると、関数が失敗し、すべてが中止され、Webサイトの接続がリセットされることがわかりました。
句読文字に一致する p {p} unicode文字プロパティにそれをnarりました。
問題がどこにあるかを正確に知っている/見る人はいますか?
preg_match('/^([\p{P}\p{S}&\p{Latin}0-9]|\s)*$/u', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
解決
あなたが非ラチン文字を「除草」しているなら、なぜこれをしないのですか:
preg_replace('/[^\p{Latin}]+/u', '', $s)
編集: さて、あなたはしようとしています 検証 入力。私はこれを使用するつもりでした:
preg_match('/^[\p{Latin}]+$/u', $s)
...しかし、ラテン語のみに一致することがわかります 手紙. 。私はジャワの文書化されていない速記のことを考えていました、 \p{L1}
, 、LATIN1(ISO-8859-1)文字セットのすべてに一致しますが、PHPでは次のことを綴る必要があります。
preg_match('/^[\x00-\xFF]+$/u', $s)