Java正则表达式验证
我想验证一个字符串,它只允许字母数字值和 java中只有一个点字符和下划线字符Java正则表达式验证,java,regex,string,Java,Regex,String,我想验证一个字符串,它只允许字母数字值和 java中只有一个点字符和下划线字符 String fileName = (String) request.getParameter("read"); 我需要验证从请求中检索的文件名,并且应该 满足上述标准 我尝试了“^[a-zA-Z0-9.']*$”,但这允许使用多个点字符 我需要在给定场景中验证我的字符串 一,。文件名仅包含字母数字值。 2.它只允许一个点字符(.),例如:fileRead.pdf, fileWrite.txt等 3.它只允许下划线
String fileName = (String) request.getParameter("read");
我需要验证从请求中检索的文件名,并且应该
满足上述标准
我尝试了“^[a-zA-Z0-9.']*$”
,但这允许使用多个点字符
我需要在给定场景中验证我的字符串
一,。文件名仅包含字母数字值。
2.它只允许一个点字符(.),例如:fileRead.pdf,
fileWrite.txt等
3.它只允许下划线字符。所有其他符号都应该是
谢绝
有人能帮我吗?你可以先检查有数字限制的特殊字符。 代码如下:
int occurance = StringUtils.countOccurrencesOf("123123..32131.3", ".");
或
如果它与您的请求不匹配,您可以在正则表达式检查之前放弃它。
如果没有问题,您现在可以对字符串进行字母数字值检查。您可以在此处使用两个负号:
^((?!.*\..*\.)(?!.*_.*_)[A-Za-z0-9_.])*$
每个lookahead断言点或下划线不会出现两次,这意味着它最多只能出现一次
不完全清楚是否需要一个点和/或下划线。我想不会,但是我的正则表达式可以很容易地修改以满足这个要求
您应该使用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());
有关正则表达式和JAVA的更多信息,请参阅本页:
您能分享一个输入输出示例吗?这个在线服务让你可以试用正则表达式,并解释单个字符以及它们在正则表达式中的作用。这对自学很有好处:)你应该指出文件名是否包含文件扩展名。您的模式允许最后一个点和第一个点。您知道Windows和Unix/Linux/OSX都允许文件名包含多个点字符吗?您的特殊限制有特殊用途吗?不要使用
matcher.find()
,而是使用matcher.matches()
。答案的正则表达式部分接受输入,比如αd.txt
(或者更糟的是:…a.txt
)。如果您使用matches()
,情况就不再是这样了。您必须避免使用反斜杠双精度。谢谢您Olivier谢谢您mattn:)
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());