2010-09-23 59 views
34

需要一個函數來剝離了一套非法的字符在javascript:|&;$%@"<>()+,JavaScript字符串替換正則表達式來去掉非法字符

這是用正則表達式來解決的一個經典問題,現在I have 2 problems手段。

這是我到目前爲止有:

var cleanString = dirtyString.replace(/\|&;\$%@"<>\(\)\+,/g, ""); 

我逃避用反斜槓正則表達式特殊字符,但我有一個困難時期試圖瞭解發生了什麼事情。

如果我單獨嘗試使用單個文字其中大部分似乎都能正常工作,但是一旦我根據順序將它們放在同一個正則表達式中,替換就會被破壞。

即這是不行的 - >dirtyString.replace(/\|<>/g, ""):

幫助讚賞!

+2

用一個簡單的'for'循環,有沒有誤解的機會:) – 2010-09-23 17:00:22

+0

如果我有沒有這就是我所做的:) – JohnIdol 2010-09-23 17:27:54

回答

60

,你需要的是character classes。在這種情況下,您只需要擔心],\-字符(如果在字符類「[」的開頭之後直接放置該字符,則可以使用^)。

語法:[字符]其中字符是字符的列表。

例子:

var cleanString = dirtyString.replace(/[|&;$%@"<>()+,]/g, ""); 
+1

是字符類中不需要的轉義字符? – JohnIdol 2010-09-23 17:27:19

+5

不,只有''''和'\'(和'^',除非你把它放在第一個位置以外的任何地方,'-'除非你把它放在第一位或最後一位)。 – 2010-09-23 17:55:36

+0

有一些特殊字符丟失... – ViliusL 2016-06-12 18:56:30

5

你需要把它們都包裝在一個字符類中。當前版本意味着用空字符串替換這個字符序列。當用方括號括起來時,這意味着用空字符串替換這些字符的任何

var cleanString = dirtyString.replace(/[\|&;\$%@"<>\(\)\+,]/g, ""); 
4

把它們放在括號[]

var cleanString = dirtyString.replace(/[\|&;\$%@"<>\(\)\+,]/g, ""); 
61

我往往看它可以是你想要的逆透視:

我想要什麼角色允許?

這是因爲可能存在lots of characters,它們會以某種方式形成一個字符串,使您不會期望的東西吹起來。

例如,這一個只允許字母和數字刪除了連字符替換它們的無效字符組:

"This¢£«±Ÿ÷could&*()\/<>[email protected]#$%^bad".replace(/([^a-z0-9]+)/gi, '-'); 
//Result: "This-could-be-bad"