0

我做错了什么还是JS替换有问题?

<input type="text" id="a" value="(55) 55-55-55" />​

document.write($("#a").val().replace(/()-/g,''));​

prints (55) 555555

http://jsfiddle.net/Yb2yV/

我怎样才能替换 () 和空格呢?

4

7 回答 7

5

在 JavaScript 正则表达式中,()字符具有特殊含义。如果您想按字面意思列出它们,请\在它们前面加上一个反斜杠 ( )。

如果您的目标是摆脱所有(, ),-和空格字符,则可以使用字符类和 on 上的交替(例如,非此即彼)组合来实现\s,它代表“白色步伐”:

document.write($("#a").val().replace(/[()\-]|\s/g,''));​

(我没有在前面放反斜杠,()因为你不需要在字符类中。我确实在前面放了一个,-因为在字符类中,-具有特殊含义。)

或者,如果你想摆脱任何不是数字的东西,你可以使用\D

document.write($("#a").val().replace(/\D/g,''));​

\D意思是“不是数字”(注意它是大写字母,\d小写是相反的[任何数字])。

有关正则表达式的 MDN 页面的更多信息。

于 2012-06-05T14:58:13.927 回答
3

您需要使用字符类

/[-() ]/

使用"-"作为第一个字符解决了歧义,因为破折号通常用于范围(例如[a-zA-Z0-9])。

于 2012-06-05T14:58:11.650 回答
0
document.write($("#a").val().replace(/[\s()-]/g,''));​

这将删除所有空格 (\s)、括号和破折号

于 2012-06-05T14:58:28.457 回答
0

括号表示正则表达式中的捕获组。您需要对它们进行转义 ( /\(\)-/) 以匹配序列“()-”。然而我猜你想使用一个字符类,即匹配“(”,“)”或“-”的表达式;空格包括\s简写

value.replace(/[()-\s]/g, "");

您可能想阅读一些文档教程

于 2012-06-05T14:59:45.350 回答
0

用这个

.replace(/\(|\)|-| /g,'')

您必须转义括号(即\(,而不是()。在您的正则表达式中,您要列出四个项目:\(, \), '-' 和(space) 并且要替换它们中的任何一个,而不仅仅是将它们四个一起替换,您必须|在它们之间使用 OR。

于 2012-06-05T15:00:14.083 回答
0

你想匹配集合中的任何字符,所以你应该使用方括号来创建一个字符集:

document.write($("#a").val().replace(/[()\- ]/g,''));

通常,括号在正则表达式中具有特殊含义,因此它们在您的正则表达式中被忽略,只留下破折号。通常,要获得文字括号,您需要使用\(但在方括号块中,如上所述,您不需要)转义它们。

上面的破折号被转义了,因为它通常指示字符集中的范围,例如[a-z].

于 2012-06-05T15:01:02.133 回答
0

可能非常糟糕,但一个非常基本的方法是,

document.write($("#a").val().replace(/(\()|(\))|-| |/g,''));​​

|表示OR\用于转义保留符号

于 2012-06-05T15:06:39.463 回答