冉冉說
2019-08-05 15:31:18
變量中的JavaScript反斜杠(\)導(dǎo)致錯誤在Javascript中,當(dāng)我在一些變量中添加反斜杠時:var ttt = "aa ///\\\";var ttt = "aa ///\"; Javscript顯示錯誤。如果我嘗試限制用戶輸入此字符,我也會收到錯誤:(("aaa ///\\\").indexOf('"') != -1)限制用戶輸入的反斜杠不是一個好策略,因為你必須向用戶顯示惱人的消息。為什么我用反斜杠得到錯誤?
3 回答

飲歌長嘯
TA貢獻(xiàn)1951條經(jīng)驗 獲得超3個贊
反斜杠(\
)是Javascript中的轉(zhuǎn)義字符(以及許多其他類C語言)。這意味著當(dāng)Javascript遇到反斜杠時,它會嘗試轉(zhuǎn)義以下字符。例如,\n
是換行符(而不是反斜杠后跟字母n)。
為了輸出一個反斜杠,你需要逃脫它。這意味著\\
將輸出一個反斜杠(\\\\
并將輸出兩個,依此類推)。原因"aa ///\"
不起作用是因為反斜杠轉(zhuǎn)義"
(將打印文字引號),因此你的字符串沒有正確終止。同樣,"aa ///\\\"
也行不通,因為最后一個反斜杠再次逃脫了引用。
請記住,對于要輸出的每個反斜杠,您需要提供兩個 Javascript 。

海綿寶寶撒
TA貢獻(xiàn)1809條經(jīng)驗 獲得超8個贊
您可能想嘗試以下操作,這或多或少是逃避用戶輸入的標(biāo)準(zhǔn)方法:
function stringEscape(s) { return s ? s.replace(/\\/g,'\\\\').replace(/\n/g,'\\n').replace(/\t/g,'\\t').replace(/\v/g,'\\v').replace(/'/g,"\\'").replace(/"/g,'\\"').replace(/[\x00-\x1F\x80-\x9F]/g,hex) : s; function hex(c) { var v = '0'+c.charCodeAt(0).toString(16); return '\\x'+v.substr(v.length-2); }}
這將使用轉(zhuǎn)義反斜杠替換所有反斜杠,然后將其他不可打印的字符轉(zhuǎn)義為其轉(zhuǎn)義形式。它還可以轉(zhuǎn)義單引號和雙引號,因此即使在eval中也可以將輸出用作字符串構(gòu)造函數(shù)(考慮到您正在使用用戶輸入,這本身就是一個壞主意)。但無論如何,它應(yīng)該完成你想要的工作。
添加回答
舉報
0/150
提交
取消