2017-03-03 32 views
1

我想刪除ajax響應字符串中的控制字符(例如:\ u0005)。 我使用正則表達式是:msg = msg.replace(/[\x00-\x1F\x7F-\x9F]/g, '');正則表達式unicode範圍[uXXXX]沒有用ajax標識

正則表達式的工作時,我的字符串靜態分配給一個變量,但同樣的表情不是我的Ajax調用工作。

// send command 
$.ajax({ 
    type: "POST", 
    cache: false, 
    url: "/data/test.txt", 
    dataType: 'text', 
    data: tmpCommand 
}) 
.done(function(msg){ 

    //remove C1 and C0 control characters from response string 
    msg = msg.replace(/[\x00-\x1F\x7F-\x9F]/g, ''); //not working 
    //msg = msg.replace(/[\u0000-\u0009]/g, ''); //not working 
    //msg = msg.replace(/\\u0005/g, ""); //working 


    response= $.parseJSON(msg); 
    console.log(response); 

}) 
.always(function(msg){ 

}); 

下面的響應是JSON字符串。例如:{「name1」:「\ u0005ABC」,「name2」:「\ u0005fgav」}

可能是什麼問題?

+0

剛剛在Chrome控制檯中嘗試過。看起來像你的正則表達式:var x =「x \ u0005x」; var y = x.replace(/ [\ u0000- \ u0009]/g,「」); var z = x.replace(/ [\ x00- \ x1F \ x7F- \ x9F]/g,''); console.log(x.length +''+ y.length +''+ z.length); – qianfg

+0

@ qianfg正則表達式就像那樣工作,但它不能與ajax響應一起工作。 – coder123

+0

您可以在替換線處設置斷點,並查看替換之前和之後msg的長度是否更改? – qianfg

回答

1

我想刪除存在於ajax響應字符串中的控制字符(例如:\ u0005)。
響應是一個JSON字符串,例如

{"name1":"\u0005ABC","name2":"\u0005fgav"} 

可能是什麼問題?

在響應文本中沒有控制字符。響應文本是JSON,其中包含您要查找的控制字符的轉義序列。沒有單個查詢字符,後面跟着一個反斜槓字符u,後跟數字。這就是爲什麼.replace(/\\u0005/g, "") - 它們一一匹配 - 起作用。

如果要替換(和匹配字符類範圍)控制字符本身,你必須先解析JSON轉義序列:

var data = JSON.parse(message); 
data.name1 = data.name1.replace(/[\x00-\x1F\x7F-\x9F]/g, ''); 
data.name2 = data.name2.replace(/[\x00-\x1F\x7F-\x9F]/g, ''); 

總體而言,我建議使用reviver callback of the native JSON.parse method爲此:

$.ajax(…).then(function(msg) { 
    return JSON.parse(msg, function(p, v) { 
     return typeof v == "string" 
      ? v.replace(/[\x00-\x1F\x7F-\x9F]/g, '') 
      : v; 
    }); 
}).then(function(response) { 
    console.log(response); 
    … 
}); 
+0

這個工程! 但是,如果我分配一個變量說,'var msg ='{「name1」:「\ u0005ABC」,「name2」:「\ u0005fgav」}';然後我不需要解析JSON。簡單地使用'msg = msg.replace(/ [\ x00- \ x1F \ x7F- \ x9F]/g,'');'工作。 但是,ajax響應並非如此。這是爲什麼? – coder123

+0

因爲這是一個字符串文字,其中'\ u0005'代表查詢字符。相反,ajax響應是普通的響應文本,相當於由「{」name1「:」\\ u0005ABC「,」name2「:」\\ u0005fgav「}'」字面構造的字符串(其中' '\\''代表反斜槓字符)。 – Bergi