仅允许字符串中的字母数字、破折号、下划线和句点(Javascript)

仅允许字符串中的字母数字、破折号、下划线和句点(Javascript),javascript,regex,Javascript,Regex,我正在写一个文件上传页面脚本Javascript。用户从其计算机中选择一个文件 我需要从包含文件名的字符串中删除以下内容: 一封信 数 短跑 下划线 一段时间 我一直在尝试使用Javascript替换函数删除不必要的字符。我可以使用以下方法移除所有非字母数字部分: rawFilename = data.files[0].name; safeFilename = rawFilename.replace(/\W/g, ''); 这会留下字母、数字和下划线,但我还需要允许破折号和句点。我不确定选

我正在写一个文件上传页面脚本Javascript。用户从其计算机中选择一个文件

我需要从包含文件名的字符串中删除以下内容:

一封信 数 短跑 下划线 一段时间 我一直在尝试使用Javascript替换函数删除不必要的字符。我可以使用以下方法移除所有非字母数字部分:

rawFilename = data.files[0].name;  
safeFilename = rawFilename.replace(/\W/g, '');

这会留下字母、数字和下划线,但我还需要允许破折号和句点。我不确定选择破折号和句点的正确正则表达式是什么。

使用负数非常简单:


唯一的问题是-必须是列表中的第一个或最后一个,因为它可以被解释为范围运算符。

添加到Lucas之前的答案中

str = str.replace(/[^\w\.\-]/g, "");

破折号和句点可以是任何位置。

完美。谢谢卢卡斯!或者冲刺可以逃脱too@Gary就像[^\w\.\-]@1.21gigawatts一样,这很好,但是如果破折号是字符类中的最后一个,那么就没有真正的必要对其进行转义,以便按字面意义进行处理。我只是指出,在这种情况下,如果它逃逸了,它不必是第一个/最后一个。我想我应该说,而不是太。
str = str.replace(/[^\w\.\-]/g, "");