我在使用以下代码时遇到了一些麻烦:
^([0-9]{17})\.zip$
我认为这应该阻止任何超过 17 个字符的字符串通过。但是,它允许名称超过 17 个字符的文件通过。
知道可能是什么问题,或者我的符号是否错误?
提前致谢
您的正则表达式将匹配由正好 17 位数字(0 到 9)以“.zip”结尾的文件名。如果您的代码允许通过更长的文件名,那么很可能是使用它的代码的错误,而不是正则表达式本身。您也可以发布一些代码吗?
鉴于您希望允许任何 17 个字符以下的字符串,您可能应该使用“.”,它匹配任何字符而不仅仅是数字或字母。
尝试将您的正则表达式更改为:^.{1,17}\.zip$(双反斜杠用于转义,因为这是 Java)
@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());
}
您的正则表达式仅允许包含 21 个字符的文件名:17 位数字,1 个点,然后是“zip”。
将其限制为 17 的一种方法是:
^([0-9]{13})\.zip$
您需要将表达式转换为:
^([0-9a-zA-Z]{,17})\.zip$
否则它只考虑数字。
您的表达式将仅匹配 17 位数字,后跟.zip
. 如果您不仅要匹配数字,还要匹配字符并将约束放宽到最多17 位(至少 1 位),您应该将您的 axpression 更改为:
^([\w]{1,17})\.zip$