我尝试使用正则表达式验证我的文件名和文件扩展名。我的文件名应仅包含以下字符:' 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,_,。,@, - ,(,),& #39;我的扩展只应接受.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;
}
如果有人可以提供帮助,请告诉我。谢谢!
答案 0 :(得分:4)
这样的东西?
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);
答案 1 :(得分:0)
尝试使用单个正则表达式对文件名和扩展名进行单行检查。
const validFilename = /^[\w,\s-]+\.[A-Za-z0-9]{3}$/i.test('filename');