Java正则表达式验证

时间:2017-06-16 08:38:02

标签: java regex string

我想验证一个只允许字母数字值的字符串     一个点字符,只有java中的下划线字符。

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

我需要验证从请求中检索的fileName并且应该 满足上述标准

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

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

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

任何人都可以帮我吗?

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_.])*$

每个前瞻声明点或下划线出现两次,这意味着它最多可以出现一次。

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

Demo

答案 2 :(得分:0)

您可以先检查具有数字限制的特殊字符。 这是代码:

int occurance = StringUtils.countOccurrencesOf("123123..32131.3", ".");

int count = StringUtils.countMatches("123123..32131.3", ".");

如果它与您的请求不符,您可以在正则表达式检查之前将其丢弃。 如果没有问题,您现在可以将String设置为字母数字值检查。