2

アプリケーションが、正規表現で言及されているファイルまたはファイルタイプの名前が電子メールに添付されないように制限する Java 正規表現を作成しようとしています。私はこのように正規表現を始めました、

    .*\\.(?:jpeg|jpg)$.

これは正しいです?。現在、機能していません(マッチング)。また、この正規表現を拡張したい場合に備えて、この式に新しいファイルタイプまたはファイル名を追加するにはどうすればよいですか。たとえば、この正規表現にも vcf ファイル タイプを追加したいのですが、どうすればよいですか? また、ファイル名を追加する必要がある場合、たとえば abc.bmp が添付されていない場合、この正規表現にそのファイル名をどのように、どこに含める必要がありますか?. 私はこの正規表現に慣れていないので、どんな助けも大歓迎です。

4

3 に答える 3

3

どうですか

if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg")) {
    // good
} else {
    // bad
}

m.buttnersの回答の下にあるあなたのコメントを読み、次のことを提案します。

List<String> allowedExtensions = loadExtensionsFromConfig(); // implement this
boolean isFileAllowed = false;
for (String extension : allowedExtensions) {
    if (fileName.endsWith(extension)) { // this is case sensitive!
        isFileAllowed = true;
        break;
    }
}
于 2012-12-04T21:15:27.070 に答える
2

次のようになります。

.*\\.(jpe?g)$
于 2012-12-04T21:19:13.217 に答える
0

それが一致しない理由は、単に.最後にあります。これは、文字列の終わりのの文字と一致しようとします。明らかに、それは機能しません。それを取り除いてください、そうすれば大丈夫です。(?:jpeg|jpg)に減らすことができることに注意してくださいjpe?g

これは、正規表現がこの問題への正しいアプローチであると言っているのではありません。可能なファイル拡張子がごくわずかである限り、私はjlordoのアプローチを好みます。これは、正規表現でどこが間違っていたかを知らせるためだけのものです。

.*または$が冗長であることに注意してください。使用しmatchている場合は、とにかく文字列全体に一致するパターンが必要です。その場合、$再度アサートする必要はありません。を使用する場合findは、文字列の任意の部分を一致させる必要がないため、を省略できます.*

編集:

コメントでの議論の後、許可された拡張子のセットと許可された特定のファイル名のセットがある場合、これは一般的な正規表現になります。

^(?:.*\\.(?:all|allowed|file|extensions)|all\\.allowed|file\\.names)$
于 2012-12-04T21:18:12.457 に答える