【问题标题】:How to validate file name and file extension from single Regex?如何从单个正则表达式验证文件名和文件扩展名?
【发布时间】:2016-10-03 20:37:50
【问题描述】:

我正在尝试使用正则表达式验证我的文件名和文件扩展名。我的文件名只能包含以下字符:'A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T, U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s, t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,_,.,@,-,(,), ' 和我的扩展只应接受 .txt 文件。我当前的功能非常复杂,需要嵌套循环我不喜欢的东西。所以我想在一个表达式中检查所有这些。这是我当前的代码:

fileName = 'My Document.txt'
fileExt = fileName.substr(fileName.length-4)
validCharList='A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,_,.,@,-,(,), ';
err = false;
letterOk = false;

    for(i=0;i<fileName.length;i++){
        letterOk = false;
        for(b=0;b<validCharList.length;b++){
            if(fileName.charAt(i) == validCharList.charAt(b)){
                letterOk = true;
                break;
            }   
        }

       if(letterOk == false){
            alert('file name has an invalid character.');
            return false;
            break;
       }
    }

if(fileExt != '.txt' && fileExt != '.TXT'){
     alert("Your document does not have a proper file extension.")
     return false;
} 

如果有人可以提供帮助,请告诉我。谢谢!

【问题讨论】:

    标签: javascript regex validation


    【解决方案1】:

    这样的?

    return /^[a-z0-9_.@()-]+\.txt$/i.test(fileName);
    

    如果你想要两个单独的检查,你是否在 cmets 中指出,你可以这样做:

    var validFilename = /^[a-z0-9_.@()-]+\.[^.]+$/i.test(fileName);
    var validExtension = /\.txt$/i.test(fileName);
    

    第一个表达式测试直到最后一个句点的所有内容,并验证在最后一个句点之后至少有一个非句点字符,包括扩展。

    如果您不想打扰文件名的定义,您可以反转测试,并明确检查是否存在无效字符(这里我再次测试整个字符串,所以@987654324即使您仅在扩展名中有无效字符,@ 也会为 false - 一种解决方法是在文件名之前验证扩展名)

    var validFilename = !/[^a-z0-9_.@()-]/i.test(fileName);
    

    【讨论】:

    • 谢谢!上面的正则表达式也应该涵盖大写/​​小写?
    • @WiktorStribiżew 正确的表达方式如何?
    • 如果您在上面的正则表达式中添加更多字符,请不要忘记在字符类的末尾保留连字符。或者在它前面加上\
    • @espresso_coffee:你的扩展测试看起来不错,但不要忘记/i,忽略大小写。对于文件名,您忘记了+,这意味着它只会查找单个字符,而不是与模式匹配的一组字符。另一个问题是,由于您丢失了$,因此您没有测试完整的字符串。即使使用+,您也只能验证名称是否以有效字符开头,而不是仅包含有效字符。请参阅我编辑的答案以获取可能的解决方案。
    【解决方案2】:

    尝试使用单个正则表达式对文件名和扩展名进行单行检查。

     const validFilename = /^[\w,\s-]+\.[A-Za-z0-9]{3}$/i.test('filename');
    

    【讨论】:

      猜你喜欢
      • 2012-02-18
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多