簡體   English   中英

如何從單個Regex驗證文件名和文件擴展名?

[英]How to validate file name and file extension from single Regex?

我正在嘗試使用正則表達式驗證我的文件名和文件擴展名。 我的文件名應僅包含以下字符:'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;
} 

如果有人可以幫助您,請告訴我。 謝謝!

像這樣嗎

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

如果要進行兩個單獨的檢查,請在注釋中指明,您可以執行以下操作:

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

第一個表達式測試直到最后一個句點的所有內容,並驗證在最后一個句點之后至少有一個非句點字符,包括擴展名。

如果您不想打擾什么是文件名的定義,則可以改為反轉測試,並顯式檢查是否存在無效字符(此處我將再次測試整個字符串,因此validFilename甚至為false如果您僅在擴展名中包含無效字符-一種解決方法是在文件名之前驗證擴展名)

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

嘗試使用單正則表達式對文件名和擴展名進行單行檢查。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM