Javaパターンの問題が発生しています。これが私のパターンです:正規表現の最初の文字が一致しない
"^[\\p{L}\\p{Digit}~._-]+$"
それは基本的にUS-ASCIIの任意の文字、数字、一部の特殊文字、URLをスクランブルないと何も一致します。
私は、このパターンと一致しない単語の最初の文字を見つけることをお勧めします。基本的に、ユーザーはテキストを入力として送信し、それを検証し、違法な文字を見つけたら例外をスローする必要があります。
このパターンを無効にしようとしましたが、正しくコンパイルできませんでした。またfind()
はあまり助けになりませんでした。
法的入力はhello
となりますが、?hello
はそうではないはずです。私の例外は?
が適切でないことを指摘しておきます。
util.regex
を使用してJavaのMatcher、Patternなどを使用することをお勧めします。その必要はありませんが、文字列内の各文字を個別にチェックすることは解決策ではありません。
編集:私は予約されていないURI文字を一致させるために、より良い正規表現を思い付いた
'!"?hello ".subString(0,1).matches("^[\\ p {L} \\ p {デジット} .'-.'_] + $ ")'? – Ferrybig
あなたは何をしようとしているのでいくつかのコードを共有することはできますか? GET/POSTパラメータをサニタイズしようとしていますか?またはURL全体ですか? – Garfield
1文字クラスで2 '' 'と' .'を使う理由は?また、 '' -.'は範囲を作成し( ''(+ *、 - ) 'にマッチします)、目的に合っていますか?ところで、{if(str.matches( "[^ \\ p {L} \\ p {Digit}。 '_-]。*")){/ * Error! * /} ' –