我应该使用什么(JavaScript)正则表达式来确保字符串是有效的文件名?

时间:2020-03-06 14:41:54  来源:igfitidea点击:

我目前仍在学习RegEx,但暂时有人可以帮助我解决这个问题吗?我对格式化字符串有一些特殊要求:

  • 没有目录。只是文件名。
  • 文件名必须全部小写。
  • 需要用下划线替换空格。

应该不难,但是我迫不及待地想要确定一个有效的文件名(即我忘记了哪些字符应被认为对文件名无效)的正确方法。

解决方案

如果我们急于赶时间,通常可以在http://regexlib.com/的库中找到可接受的正则表达式。
编辑说:这可能适合我们。

我会签出RegEx库。

我们可以从任意数量的不同健壮程度的预配置正则表达式中进行选择,以满足需求。

如果我们要从用户处获取字符串路径(例如,通过读取文件上载字段的.value),则实际上无法确定路径分隔符是什么。它可能是反斜杠(Windows),正斜杠(Linux,OS X,BSD等),或者完全是旧的或者晦涩的OS上的其他东西。在路径上使用正斜杠或者反斜杠进行分割都可以解决常见的情况,但是最好包含用户可以覆盖文件名的功能,以防万一我们猜错了。

至于"无效字符",这些也取决于操作系统。最简单的方法可能是用占位符(例如下划线)替换所有非字母数字。

这是我使用的:

var parts= path.split('\');
parts= parts[parts.length-1].split('/');
var filename= parts[parts.length-1].toLowerCase();
filename= filename.replace(new RegExp('[^a-z0-9]+', 'g'), '_');
if (filename=='') filename= '_'

我建议使用RegExp和其他javascript的简单组合:

var a = "c:\some\path\to\a\file\with Whitespace.TXT";
a = a.replace(/^.*[\\/]([^\\/]*)$/i,"");
a = a.replace(/\s/g,"_");
a = a.toLowerCase();
alert(a);