我创建一个脚本来验证字符串是否包含一些char。但是,我对这个字符串有疑问。
这是我的剧本:
var special_char = ['|', '/', '&', ' ', '$', '@', ';', '*', '%', '.', ','];
var file_name_ext = upl_data.substring(upl_data.lastIndexOf("\\") + 1, upl_data.length);
var file_name = file_name_ext.split('.');
var isVerified = 0;
for (var i = 0; i < special_char.length; i++){
if(file_name[0].indexOf(special_char[i]) == -1) {
isVerified += 0;
} else {
isVerified += 1;
}
}
if(isVerified != 0){
alert("NOT OK");
}
else{ alert("OK"); }
上面的脚本效果很好,直到我遇到这个字符串:
XXX.YYY.pdf
。由于我使用.
进行拆分并使用file_name[0]
,因此会忽略所有special_char
。我该如何解决这个问题?
答案 0 :(得分:3)
您可以使用以下正则表达式来获取不带扩展名的文件名:
var file = 'xxx.yyy.pdf',
filename = file.match(/.+(?=\.\w+$)/)[0];
console.log(filename);
&#13;
但我认为最好的方法是使用test
对象的RegExp
方法验证完整文件名。 MSDN表示文件名(包括文件扩展名)不得包含以下字符:
以下保留字符:
- 小于(&lt;)
- 大于(&gt;)
- 冒号(:)
- 双引号(&#34;)
- 正斜杠(/)
- 反斜杠(\)
- 竖条或竖线(|)
- 问号(?)
- 星号(*)
因此,可以使用以下正则表达式来验证NTFS和FAT文件系统的文件名:
var file = 'xxx.yyy.pdf',
isValid = /^[^<>:"/\\?*]+$/.test(file);
console.log(isValid );
&#13;
有online tool可以帮助您。
答案 1 :(得分:1)
var file_name_ext = "XXX.YYY.pdf"
var file_name = file_name_ext.slice(0, file_name_ext.lastIndexOf('.'));
console.log(file_name)
修剪延伸的简单解决方案