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