Java 正则表达式验证

新手上路,请多包涵

我想验证一个字符串,它只允许字母数字值和一个点字符,并且在 java 中只允许下划线字符。

 String fileName = (String) request.getParameter("read");

我需要验证从请求中检索的文件名并且应该满足上述条件

我试过 "^[a-zA-Z0-9_'.']*$" ,但这允许多个点字符

我需要在给定的场景中验证我的字符串,

1.文件名仅包含字母数字值。 2.它只允许一个点字符 (.),例如:fileRead.pdf、fileWrite.txt 等 3。它只允许下划线字符。应拒绝所有其他符号

谁可以帮我这个事 ?

原文由 user3518223 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 645
2 个回答

你应该使用 String.matches() 方法:

 System.out.println("My_File_Name.txt".matches("\\w+\\.\\w+"));

您还可以使用 java.util.regex 包。

 java.util.regex.Pattern pattern =
java.util.regex.Pattern.compile("\\w+\\.\\w+");

java.util.regex.Matcher matcher = pattern.matcher("My_File_Name.txt");

System.out.println(matcher.matches());

有关 REGEX 和 JAVA 的更多信息,请查看此页面: https ://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

原文由 Valentin Genevrais 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以在这里使用两个负面的前瞻:

 ^((?!.*\..*\.)(?!.*_.*_)[A-Za-z0-9_.])*$

每个前瞻断言点或下划线 不会 出现两次,这意味着它最多只能出现一次。

是否 需要 一个点和/或下划线并不完全清楚。我假设不是,但我的正则表达式可以很容易地修改为这个要求。

演示

原文由 Tim Biegeleisen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题