次のコードで少し問題があります。
^([0-9]{17})\.zip$
これにより、17 文字を超える文字列が通過するのを防ぐ必要があると考えました。ただし、17 文字を超える名前のファイルは通過できます。
何が問題なのか、または私の表記が間違っているのか、何か考えはありますか?
前もって感謝します
正規表現は、「.zip」で終わる正確に 17 桁 (0 から 9) で構成されるファイル名と一致します。コードで長いファイル名を許可している場合は、正規表現自体ではなく、それを使用するコードに問題がある可能性があります。コードの一部も投稿できますか?
式を次のように変換する必要があります。
^([0-9a-zA-Z]{,17})\.zip$
それ以外の場合は、数値のみが考慮されます。
正規表現では、正確に21 文字のファイル名のみが許可されます: 17 桁、1 つのドット、次に「zip」。
17 に制限する 1 つの方法は次のとおりです。
^([0-9]{13})\.zip$
17 文字未満の任意の文字列を許可する場合は、数字や文字だけでなく任意の文字に一致する "." を使用する必要があります。
正規表現を次のように変更してみてください: ^.{1,17}\.zip$ (これは Java であるため、エスケープにはバックスラッシュを 2 つ使用します)
@Test
public void testRegexShouldMatch() {
Pattern pattern = Pattern.compile("^.{1,17}\\.zip$");
Matcher matcher = pattern.matcher("some file name.zip");
assertTrue(matcher.find());
}
@Test
public void testRegexShouldNotMatchAsOver17Chars() {
Pattern pattern = Pattern.compile("^.{1,17}\\.zip$");
Matcher matcher = pattern.matcher("some long file name.zip");
assertFalse(matcher.find());
}
あなたの表現は、正確に 17 桁の後に.zip
. 数字だけでなく文字も一致させ、制約を最大17 桁 (および少なくとも 1 桁) に緩和する場合は、表現を次のように変更する必要があります。
^([\w]{1,17})\.zip$