2013-05-21 30 views
2

我上面一个JavaScript正则表达式的功能代码:为什么我的正则表达式让我写“,”(逗号)?

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

始终是我写的任何特殊字符功能删除此字符,例如:

我写的45656654 @而这个函数清理“@”这样45656654.

我的问题

的问题是,当我写什么“”(逗号)的功能不工作,我尝试” .-()/ &%$#“和功能工作。

任何帮助来捕捉和删除逗号?

+5

你不应该把'{1,3}'里面的设置。你的正则表达式可以被重写为'/ \ D {1,3}/g'。 – VisioN

+1

您正在告诉它匹配任何不是数字{,1,逗号,3或}的内容。在范围内(方括号)特殊字符通常不被视为特殊字符,它们被视为常规字符。你试图执行的实际规则是什么? –

回答

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

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

你可能是指

/\D{1,3}/g 

,但实际上,如果你想使用正则表达式来取代非数字,只是用

/\D+/g 
+0

蒂姆我很抱歉,我很困惑,但我使用'/ \ D +/g',但让我键入卷发布鲁斯,你知道它发生了什么吗?另一个问题为什么该功能在Chrome中不起作用? –

+0

@Freak_Droid:你的功能不关心你输入的内容。当它被调用时,它会从文本框中删除所有非数字。 –

3

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

在方括号(字符集)中,大多数符号没有其特殊效果,除了]\^在集合的开始,这意味着补足。因此

[^\d{1,3}] 

装置任何字符不是数字也不{1,3}13,是这里的冗余信息)。

进一步解释:\d指任何号码,\D手段补充数量(一切,但数量),[]字符集的手段。由于\d\D已经设置,所以不需要将它们放在方括号中,并且[^\d]\D相同。

因此,要匹配除1-3号码集外的所有内容,您可以编写\D{1,3}[^\d]{1,3}。换句话说,把大括号放在方括号后面。


蒂姆Pietzckler在另一个答案显示你应该做什么。

+0

嗯,我读了你的解释,我明白发生了什么事。只有我删除'{}'和'Works'/ [^ \ d {}]/g'里面的所有内容,我不知道这是否正确,但是谢谢。 –

+0

@Freak_Droid:好的,没有。现在花括号也会被替换操作忽略,而不仅仅是数字。 –

+0

@TimPietzcker我如何解决它?现在我迷惑了:谢谢。 –