Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式验证_Java_Regex_String - Fatal编程技术网

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.它只允许下划线

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

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());