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

StackOverflow https://stackoverflow.com/questions/130837

  •  02-07-2019
  •  | 
  •  

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

  1. 没有目录。只是文件名。
  2. 文件名必须全部小写。
  3. 空格需要用下划线替换。
  4. 不应该很难,但是我时间紧迫,我不确定'正确'的方式来确保有效的文件名(即我忘记哪些字符应该对文件名无效)。

有帮助吗?

解决方案

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

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

其他提示

如果您处于超急行状态,通常可以在 http://中找到库中可接受的正则表达式regexlib.com/ 。 编辑说:这是一个可能适合你的方式

如果您从用户那里获取字符串路径(例如,通过读取文件上载字段的.value),您实际上无法确定路径分隔符是什么。它可能是一个反斜杠(Windows),正斜杠(Linux,OS X,BSD等)或完全在旧的或模糊的操作系统上的其他东西。在前向或反斜杠上拆分路径将涵盖常见情况,但是如果我们猜错了,最好包括用户覆盖文件名的能力。

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

以下是我使用的内容:

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= '_'

我会查看 RegEx Library

您可以从任意数量的预配置正则表达式中选择不同程度的稳健性,以满足您的需求。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top