1

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

  1. 没有目录。只是文件名。
  2. 文件名必须全部小写。
  3. 空格需要用下划线代替。

应该不难,但我时间紧迫,我不确定确保文件名有效的“正确”方式(即我忘记了哪些字符应该对文件名无效)。

4

3 回答 3

3

如果您非常着急,通常可以在http://regexlib.com/的库中找到可接受的正则表达式。编辑说: 这可能对您有用

([0-9a-z_-]+[\.][0-9a-z_-]{1,3})$
于 2008-09-25T00:41:38.947 回答
1

如果您从用户那里获取字符串路径(例如,通过读取文件上传字段的 .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= '_'
于 2008-09-26T12:54:49.103 回答
1

我建议使用 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);
于 2008-09-29T02:02:05.450 回答