为什么我的正则表达式让我写“,”(逗号)?

时间:2013-05-21 15:06:38

标签: javascript regex

我上面有一个JavaScript正则表达式函数代码:

function AcceptDigits(objtextbox) {
    var exp = /[^\d{1,3}]/g;
    objtextbox.value = objtextbox.value.replace(exp, '');
}; 

总是我写一个任何特殊字符的函数删除这个字符为例:

我写了45656654 @并且这个函数像45656654那样清理“@”。

我的问题

问题是,当我写任何“,”(逗号)函数不起作用时,我尝试“.-()/&%$#”并且函数工作。

有关捕获和删除逗号的任何帮助吗?

2 个答案:

答案 0 :(得分:9)

/[^\d{1,3}]/g

表示“单个字符既不是数字,也不是大括号,也不是逗号”。

你可能意味着

/\D{1,3}/g

但实际上,如果您想使用该正则表达式替换非数字,请使用

/\D+/g

答案 1 :(得分:3)

解释为什么逗号不起作用:

在方括号(字符集)中,除了设置开头的]\以及^外,大多数符号都没有特殊效果,这意味着补码。因此

[^\d{1,3}]

表示任何非数字的字符,{1,3} ({{ 1}}和1,这里是冗余信息。)

进一步说明: 3表示任何数字,\d表示数字的补码(除数字外的所有内容),\D表示字符集。由于[]\d都已设置,因此无需将它们放入方括号中,\D[^\d]相同。

因此,为了匹配除1-3个数字集之外的所有内容,您可以编写\D\D{1,3}。换句话说,将大括号放在方括号后面。


Tim Pietzckler在另一个答案中展示了你应该做的事情。