【问题标题】:Is there a better way to sanitize input with javascript?有没有更好的方法来使用 javascript 清理输入?
【发布时间】:2014-06-04 21:42:54
【问题描述】:

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

它必须只允许以下字符:

  • 字母数字字符(不区分大小写):[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 中不匹配?

【问题讨论】:

  • 节省一些时间,不要打扰,在服务器上做。 Javascript 过滤太容易绕过了
  • 实际上我正在使用 SSJS 在服务器上执行此操作,因为我在后端使用 XPages。如果我使用的是 Node.js,我也可以这么说。 :)
  • 您允许使用\s 换行、制表符等。如果您只想允许空格,请在正则表达式中使用空格。
  • \s 并不意味着“空格”。它包括“制表符”、“空格”、“回车”、“换行”、“垂直制表符”和“换页”。
  • @RobG 将其添加为答案,\s 是问题所在。你在 Derek 之前提到过(我也不得不在最后移动连字符)。

标签: javascript regex string xpages sanitization


【解决方案1】:

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\t\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)我喜欢 XPages SSJS 中的 javascript。这是 对我来说比 Java 方式更简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-08
    • 2016-07-21
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    相关资源
    最近更新 更多