-1
我的验证需要具有以下要求正则表达式:正则表达式允许的文件扩展名只有一次
- 文件的扩展名应该只出现一次,如
myfile.pdf
(有效)myfile.pdf.pdf
(无效)
- 有效的文件扩展
pdf
,doc
,docx
:myfile.pdf
(有效)myfile.doc
(有效)myfile.txt
(无效)
能否请你帮我在Java正则表达式表达。
我的验证需要具有以下要求正则表达式:正则表达式允许的文件扩展名只有一次
myfile.pdf
(有效)myfile.pdf.pdf
(无效)pdf
,doc
,docx
:
myfile.pdf
(有效)myfile.doc
(有效)myfile.txt
(无效)能否请你帮我在Java正则表达式表达。
我建议分开检查要求。例如:
public static void main(String[] args) throws Exception {
String [] fileNames = {"myfile.pdf","myfile.pdf.pdf","myfile.doc","myfile.txt","myfile.txt.doc"};
for(String fileName : fileNames){
boolean valid = hasValidExtension(fileName) && noDuplicates(fileName);
System.out.println(fileName+"\t" + (valid?"Valid":"Invalid"));
}
}
public static boolean hasValidExtension(String fileName){
String ext = fileName.split("\\.(?=[^\\.]+$)")[1];
if(ext.equals("pdf")||ext.equals("doc")||ext.equals("docx")){
return true;
}
return false;
}
public static boolean noDuplicates(String fileName){
String[] splited = fileName.split("\\.");
Set<String> set = new HashSet<>();
for (String str : splited) {
if (set.add(str) == false) {
return false;
}
}
return true;
}
是否会像myFile.txt.pdf匹配?它有两个扩展,但只有一个是有效的。 – Sweeper
你有什么尝试?失败的地方在哪里?我们不是代码编写服务,请阅读[帮助]以获取有关提问的指导。 –
是的,myFile.txt.pdf会匹配。 – user868888