jQuery从string等中删除特殊字符

我有这样的string:

var str = "I'm a very^ we!rd* Str!ng."; 

我想要做的是从上面的string中删除所有特殊字符,并replace空格,以防input下划线和 – 字符。

上面的string在“转换”之后看起来像这样:

 var str = 'im-a-very-werd-strng'; 

replace(/[^a-z0-9\s]/gi, '')会将string过滤为字母数字值,并replace(/[_\s]/g, '-')将replace下划线和空格连字符:

 str.replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-') 

正则expression式的来源:正则expression式的JavaScript只允许字母数字

这里是一个演示: http : //jsfiddle.net/vNfrk/

假设“特殊”是指非单词字符,那么这很容易。

 str = str.replace(/[_\W]+/g, "-") 
 str.toLowerCase().replace(/[\*\^\'\!]/g, '').split(' ').join('-') 

既然我不能评论贾斯珀的答案,我想指出他的解决scheme中的一个小错误:

 str.replace(/[^a-z0-9\s]/gi, '').replace(/[_\s]/g, '-'); 

问题是,第一个代码删除所有的连字符,然后试图取代他们:)你应该反转replace调用,并添加连字符第二个replace正则expression式。 喜欢这个:

 str.replace(/[_\s]/g, '-').replace(/[^a-z0-9-\s]/gi, '');