如果字符串包含此char,如何验证它?

时间:2018-02-28 02:35:44

标签: javascript

我创建一个脚本来验证字符串是否包含一些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。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

您可以使用以下正则表达式来获取不带扩展名的文件名:

&#13;
&#13;
var file = 'xxx.yyy.pdf',
  filename = file.match(/.+(?=\.\w+$)/)[0];
console.log(filename);
&#13;
&#13;
&#13;

但我认为最好的方法是使用test对象的RegExp方法验证完整文件名。 MSDN表示文件名(包括文件扩展名)不得包含以下字符:

  

以下保留字符:

     
      
  • 小于(&lt;)
  •   
  • 大于(&gt;)
  •   
  • 冒号(:)
  •   
  • 双引号(&#34;)
  •   
  • 正斜杠(/)
  •   
  • 反斜杠(\)
  •   
  • 竖条或竖线(|)
  •   
  • 问号(?)
  •   
  • 星号(*)
  •   

因此,可以使用以下正则表达式来验证NTFS和FAT文件系统的文件名:

&#13;
&#13;
var file = 'xxx.yyy.pdf',
  isValid = /^[^<>:"/\\?*]+$/.test(file);
console.log(isValid );
&#13;
&#13;
&#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)

修剪延伸的简单解决方案