正则表达式 - 替换特殊字符,除了点号

4
$('#price').keyup(function(){
        $('#price').val($('#price').val().replace(/[_\W]+/g, "-"));
})

看实际效果:http://jsfiddle.net/2KRHh/6/
这将删除特殊字符,但是我该如何指定不替换点号?

2
这可能不是实现您想要的内容的好方法。比如我使用鼠标复制和粘贴一些特殊字符,它不会触发 keyup 函数。 - bozdoz
1
你可以更改正则表达式以列出你想要“保留”的字符,而不是你想要替换的字符。与^运算符结合使用。 - nnnnnn
2个回答

7
请使用以下正则表达式进行匹配:
 /[^\w.]|_/g

该代码读取除了字母数字(包括下划线)或句点以外的任何字符,或者是下划线。

更新
但这段代码可能更易读:

/[^0-9a-zA-Z.]/g

我认为你在正则表达式中想要添加一个“\”,如下所示:/([^\w.])|_/g 另外,为什么在[^\w.]字符类周围添加了一个捕获组? - sigpwned
但是这个替换也会影响数字。这应该允许数字0-9和数字。 - Horn Masgerter
@sigpwned:捕获组不是必需的。 - Faust
1
@Horn:\w 表示任何数字、字母或下划线字符,而字符类开头的 ^ 表示任何不属于这些字符的内容,因此它不会替换数字。 - Faust

0

虽然这个方法有点老了,但如果有人仍然需要它,Faust的答案对我没有用(我试图更改文件名以在URL中使用它),所以这是我找到的解决方案:

preg_replace('/[^A-Za-z0-9.\-]/', '', $string);

请重新阅读问题,他们想要替换特殊字符,除了点号,因此连字符必须被删除。 - Toto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接