2014-04-20 61 views
2

我想編寫一個javascript函數來清理用戶輸入並刪除任何不需要的和危險的字符。有沒有更好的方式來消毒輸入與JavaScript?

它必須僅允許下列字符:

  • Alfanumeric字符(區分insentitive):[A-Z] [0-9]。
  • 內部空格,如「word1 word2」。
  • 西班牙文字符(案件不知情):[áéíóúñü]。
  • 下劃線和連字符[_-]。
  • 點和逗號[。,]。
  • 最後,必須使用trim()修剪字符串。

我第一次嘗試是:

function sanitizeString(str){ 
str = str.replace(/[^a-z0-9áéíóúñü_-\s\.,]/gim,""); 
return str.trim(); 
} 

但是,如果我做的:

sanitizeString("word1\nword2") 

返回:

"word1 
word2" 

所以我不得不重寫功能明確移除\ t \ n \ f \ r \ v \ 0:

function sanitizeString(str){ 
str = str.replace(/([^a-z0-9áéíóúñü_-\s\.,]|[\t\n\f\r\v\0])/gim,""); 
return str.trim(); 
} 

我想知道:

  1. 是否有更好的方法來淨化輸入的JavaScript?
  2. 爲什麼\ n和\ t在第一個版本RegExp中不匹配?
+4

節省自己一些時間,不要打擾,請在服務器上執行。 Javascript過濾太容易繞過 – andrew

+0

其實我在服務器上用SSJS做這件事,因爲我在後端使用XPages。如果我使用Node.js,我可以這麼說。 :) –

+3

你正在用'\ s'來允許換行,製表符等。如果您只想允許空格,請改用正則表達式中的空格。 – RobG

回答

1

sanitizeString功能的新版本:(@RobG寫一個答案你的評論,我會接受的):

function sanitizeString(str){ 
    str = str.replace(/[^a-z0-9áéíóúñü \.,_-]/gim,""); 
    return str.trim(); 
} 

主要問題是由@RobG和@Derek提到\ s不意味着什麼,現在w3Schools says

查找空白字符

這意味着什麼MDN says

匹配單個空格字符,包括空格,製表符,形式 飼料,換行。相當於[ \ f \ n \ r \ t \ v \ u0080 \ u1680 \ u2180e \ u20001 \ u2003 \ u2004 \ u2006 \ u2007 \ u2009 \ u200a \ u2028 \ u2029 \ u202f \ u205f \ U3000。

我寫信給w3Schools時,我寫了這個函數。

第二個變化是爲了避免它的範圍分隔符含義,將短劃線字符( - )移到末尾。

  • 注1:這是一個使用javascript的服務器端驗證。
  • 注2: (用於IBM Notes XPagers)我喜歡XPages SSJS中的javascript。對於我來說,這比對Java更簡單的方式是 。
相關問題