有没有更好的方法来使用javascript清理输入?

时间:2014-04-20 20:04:47

标签: javascript regex string xpages sanitization

我想编写一个javascript函数来清理用户输入并删除任何不需要的和危险的字符。

必须只允许以下字符:

  • Alfanumeric characters(case 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中不匹配?

1 个答案:

答案 0 :(得分:5)

新版 sanitizeString 功能:

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

@RobG和@Derek提到了主要问题:(@ RobG写下您的评论作为答案,我会接受它)\ s并不意味着现在w3Schools says

  

找一个空格字符

这意味着MDN says

  

匹配单个空格字符,包括空格,制表符,表单   饲料,换行。相当于 [   \˚F\ n \ r \吨符\ v \ u00a0 \ u1680 \ u180e \ U2000 \ U2001 \ u2002 \ u2003 \ u2004 \ u2005 \ u2006 \ u2007 \ u2008 \ u2009 \ u200a \ u2028 \ u2029 \ u202f \ u205f \ U3000]。

当我写这个函数时,我信任w3Schools。

第二个更改是将短划线字符( - )移到最后,以避免它的范围分隔符含义。

  • 注1:这是使用javascript进行的服务器端验证。
  • 注2: (对于IBM Notes XPagers)我喜欢XPage SSJS中的javascript。这是 对我来说比Java方式更简单。