2012-01-23 66 views
42

我有一个这样的字符串:jQuery的从字符串删除特殊字符,更

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

我希望做的是从上面的字符串中删除所有特殊字符和替代空间,以防他们被输入,用 - 字符强调。

上面的字符串应该是这样的“转型”后:

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

首先,你可能会使用双引号的字符串,因为里面有一个单引号。 –

+0

你是对的,但它只是一个例子。对不起。 – Roel

+1

为什么这被标记为jQuery?文本处理与jQuery无关。 – gonchuki

回答

97

replace(/[^a-z0-9\s]/gi, '')将过滤字符串到只有字母数字值和replace(/[_\s]/g, '-')将连字符代替下划线和空格:

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

来源为正则表达式:RegEx for Javascript to allow only alphanumeric

这里演示:http://jsfiddle.net/vNfrk/

+2

*来自[Daniel Przybylowski]的评论(http://stackoverflow.com/users/3941987/daniel-przybylowski):*似乎下划线被第一个正则表达式去掉了。所以第二个可能是:replace(/ \ s {1,}/g,' - ')量词的原因是用' - '替换一个或多个空格。为什么?想象一下像“某物”这样的字符串。 –

+0

非常感谢! – Yass

+0

什么是? –

21

通过假设“特殊”你的意思是无字的字符,那是很容易的。

str = str.replace(/[_\W]+/g, "-") 
+0

我想删除非单词字符(或将其替换为“无”)。我想保留数字和普通字母,并且想用横条替换空格和下划线。 – Roel

+0

这是最强大的答案。简单而强大..! – KeepMove

+1

值得指出的是,与上述所有答案不同,这个实际上处理“foo&bar”就像这个“foo-bar”,而不是像这个“foo-bar”。简短,简单,完美的工作! –

13
str.toLowerCase().replace(/[\*\^\'\!]/g, '').split(' ').join('-') 
1

既然不能在Jasper的回答进行评论,我想他的解决方案指出一个小bug:

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

的问题是,第一个代码删除所有的连字符,然后试图取代它们:) 您应该反转替换调用,并添加连字符第二个替换正则表达式。像这样:

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

从字符串句子中删除数字,下划线,空格和特殊字符。

str.replace(/[0-9`[email protected]#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi,''); 

Demo

相关问题