我目前仍在学习 RegEx,但暂时有人可以帮我解决这个问题吗?我对格式化字符串有一些特殊要求:
- 没有目录。只是文件名。
- 文件名必须全部小写。
- 空格需要用下划线代替。
应该不难,但我时间紧迫,我不确定确保文件名有效的“正确”方式(即我忘记了哪些字符应该对文件名无效)。
我目前仍在学习 RegEx,但暂时有人可以帮我解决这个问题吗?我对格式化字符串有一些特殊要求:
应该不难,但我时间紧迫,我不确定确保文件名有效的“正确”方式(即我忘记了哪些字符应该对文件名无效)。
如果您非常着急,通常可以在http://regexlib.com/的库中找到可接受的正则表达式。编辑说: 这可能对您有用:
([0-9a-z_-]+[\.][0-9a-z_-]{1,3})$
如果您从用户那里获取字符串路径(例如,通过读取文件上传字段的 .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= '_'
我建议使用 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);