3

Java でファイル名をフィルタリングする際に多くの問題が発生しています。PrimeFaces の fileUpload タグを使用していますが、ファイルに含まれるファイルが英数字のみで、その後に「.txt」などの拡張子が続く場合にアップロードできるファイルを許可する必要があります。具体的には、名前には拡張子の前に、AZ、az、または 0-9 の 1 つまたは複数が含まれ、スペースやその他の文字は含まれず、その後に拡張子「.txt」が続く必要があります。 「。」拡張子の先頭にある必要があります。

これまでのところ、名前をフィルタリングする試みはすべて適切に機能していません.。除外すると、拡張子からも除外されます。ファイル名は、、などのタイプである必要がありますがabcXYZ123.txt、などaaaccc001.txtではありません。ab.cd.txt

/[A-Za-z0-9]+\\.txt$//[^\\W_]+\\.txt$/、などのさまざまな組み合わせを試し/[\\p{Alnum}]\\.txt$/ましたが、無効な名前が許可されるか、有効な名前が除外されます。

いくつかの助けをいただければ幸いです。

4

1 に答える 1

1

$最後に正しい軌道に乗っていると思います。^最初にキャレットと一致させて取得します

^[A-Za-z0-9]+\\.txt$

$「行の終わり」を意味するのと同様に、「行^の開始」を意味します。

これを regexでテストする^[A-Za-z0-9]+\.txt$と、次のようになります。

マッチ

  • a.txt
  • abcXYZ123.txt
  • aaccc001.txt

一致するものはありません

  • a.b.c.txt
  • ab.cd.txt
  • .txt

補足として、正規表現の実装によっては、alnum が等しい場合と等しくない場合があります[A-Za-z0-9]。他の番号付けシステムの数字が含まれる場合があります (たとえば、六は中国語で 6 です)。

于 2013-03-24T20:13:26.467 に答える