1

以下の正規表現を使用して、非ラテン文字を除外しています。その結果、342 文字を超える文字列を使用すると、関数が失敗し、すべてが中止され、Web サイト接続がリセットされることがわかりました。

任意の句読点文字に一致する \p{P} ユニコード文字プロパティにまで絞り込みました。

問題がどこにあるかを正確に知っている/見ている人はいますか?

preg_match('/^([\p{P}\p{S}&\p{Latin}0-9]|\s)*$/u', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');

4

1 に答える 1

1

ラテン文字以外の文字を「削除」する場合は、次のようにしてください。

preg_replace('/[^\p{Latin}]+/u', '', $s)

編集:さて、あなたは入力を検証しようとしています。私は言うつもりだった、これを使用してください:

preg_match('/^[\p{Latin}]+$/u', $s)

...しかし、ラテン文字にのみ一致することがわかりました。私は\p{L1}、Latin1(ISO-8859-1)文字セットのすべてに一致するJavaの文書化されていない省略形を考えていましたが、PHPではそれを詳しく説明する必要があります。

preg_match('/^[\x00-\xFF]+$/u', $s)
于 2010-07-05T02:55:17.910 に答える