2013-12-18 31 views
0

我的數據不支持全角和半角字符。所以我需要在插入之前將它們轉義出來。刪除javascript中的全角和半角字符

我相信範圍是U + FF00到U + FFFF

所以我的函數讀取

function escapeZeroWidth(userInput){ 
    return (userInput ? userInput.replace(/[\uFF00-\uFFFF]/g, '') : userInput); 
} 

但這無法正常運行(不escapin字符)。

代碼有什麼問題嗎?

+0

你爲什麼在Javascript中這樣做?這與數據庫限制有什麼關係?爲什麼只有「全角字符」,那麼其他幾十萬個Unicode字符呢?如果您接受任何類型的輸入,請確保您的數據庫可以處理它。如果您只希望某些類型的輸入,則驗證並拒絕服務器上的輸入*。這個問題似乎非常誤導。 – deceze

+1

對不起,我剛剛讀了你的問題。在你的代碼中,似乎你想刪除這些字符,但是你的問題的標題是'Escape'。你想要什麼?你的數據庫是什麼? – hgoebl

+0

關於其他字符的好處,但這需要一個快速補丁,我們有一個或兩個字符只有全寬的問題,雖然我正在做所有全寬字符。 – Akshay

回答

2

我認爲這是FF00 - FFFE(但這不重要)。我將其更改爲這樣的事情,所以你不鬆ASCII字符:

return userInput.replace(/[\uFF00-\uFFFE]/g, function (char) { 
    if (char >= '\uFF00' && char <= '\uFF5E') { 
     return String.fromCharCode(
      ' '.charCodeAt(0) + 
      (char.charCodeAt(0) - '\uFF00'.charCodeAt(0))); 
    } 
    return ''; 
}); 

但是,當你說這是行不通的,也許你要處理其它字符比全寬爲好。

+0

您可以查看[node-codepoint]的源代碼(https://github.com/koichik/node-codepoint/)並閱讀http://mathiasbynens.be/notes/javascript-escapes和http ://www.2ality.com/2013/09/javascript-unicode.html – hgoebl

+0

是的好點,可能有其他字符,然後全角,實際上是一個快速補丁,對於特定的字符,並且該字符是一個全角字符,寬字符。 – Akshay