2013-05-21 33 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我如何解決它?現在我迷惑了:謝謝。 –