0

次のコードで少し問題があります。

^([0-9]{17})\.zip$

これにより、17 文字を超える文字列が通過するのを防ぐ必要があると考えました。ただし、17 文字を超える名前のファイルは通過できます。

何が問題なのか、または私の表記が間違っているのか、何か考えはありますか?

前もって感謝します

4

5 に答える 5

3

正規表現は、「.zip」で終わる正確に 17 桁 (0 から 9) で構成されるファイル名と一致します。コードで長いファイル名を許可している場合は、正規表現自体ではなく、それを使用するコードに問題がある可能性があります。コードの一部も投稿できますか?

于 2013-08-05T12:52:19.107 に答える
2

式を次のように変換する必要があります。

^([0-9a-zA-Z]{,17})\.zip$

それ以外の場合は、数値のみが考慮されます。

于 2013-08-05T12:53:06.727 に答える
2

正規表現では、正確に21 文字のファイル名のみが許可されます: 17 桁、1 つのドット、次に「zip」。

17 に制限する 1 つの方法は次のとおりです。

^([0-9]{13})\.zip$
于 2013-08-05T12:53:37.883 に答える
2

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());
}
于 2013-08-05T13:43:46.590 に答える
0

あなたの表現は、正確に 17 桁の後に.zip. 数字だけでなく文字も一致させ、制約を最大17 桁 (および少なくとも 1 桁) に緩和する場合は、表現を次のように変更する必要があります。

^([\w]{1,17})\.zip$
于 2013-08-05T13:44:03.417 に答える