我想验证一个只允许字母数字值的字符串 一个点字符,只有java中的下划线字符。
String fileName = (String) request.getParameter("read");
我需要验证从请求中检索的fileName并且应该 满足上述标准
我试过"^[a-zA-Z0-9_'.']*$"
,但这允许多个点字符
我需要在给定的场景中验证我的字符串,
1。文件名仅包含字母数字值。 2。它只允许一个点字符(。),例如:fileRead.pdf, fileWrite.txt等 3。它只允许下划线字符。所有其他符号应该是 下降
任何人都可以帮我吗?
答案 0 :(得分:3)
您应该使用 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
答案 1 :(得分:1)
你可以在这里使用两个否定的前瞻:
^((?!.*\..*\.)(?!.*_.*_)[A-Za-z0-9_.])*$
每个前瞻声明点或下划线不出现两次,这意味着它最多可以出现一次。
您是否需要一个点和/或下划线并不完全清楚。我没想,但我的正则表达式可以很容易地修改为这个要求。
答案 2 :(得分:0)
您可以先检查具有数字限制的特殊字符。 这是代码:
int occurance = StringUtils.countOccurrencesOf("123123..32131.3", ".");
或
int count = StringUtils.countMatches("123123..32131.3", ".");
如果它与您的请求不符,您可以在正则表达式检查之前将其丢弃。 如果没有问题,您现在可以将String设置为字母数字值检查。