2017-07-14 52 views
-1

我的验证需要具有以下要求正则表达式:正则表达式允许的文件扩展名只有一次

  1. 文件的扩展名应该只出现一次,如
    • myfile.pdf(有效)
    • myfile.pdf.pdf(无效)
  2. 有效的文件扩展pdfdocdocx
    • myfile.pdf(有效)
    • myfile.doc(有效)
    • myfile.txt(无效)

能否请你帮我在Java正则表达式表达。

+0

是否会像myFile.txt.pdf匹配?它有两个扩展,但只有一个是有效的。 – Sweeper

+2

你有什么尝试?失败的地方在哪里?我们不是代码编写服务,请阅读[帮助]以获取有关提问的指导。 –

+0

是的,myFile.txt.pdf会匹配。 – user868888

回答

0

我建议分开检查要求。例如:

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; 
} 
相关问题