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

问题描述 投票:0回答:1

我想编写一个 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"

所以我不得不重写函数来显式删除 :

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

我想知道:

  1. 有没有更好的方法来使用 javascript 清理输入?
  2. 为什么 并且在第一个版本 RegExp 中不匹配?
javascript regex string xpages sanitization
1个回答
31
投票

新版本的 sanitizeString 函数:

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

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

查找空白字符

这就是 MDN 所说的意思

匹配单个空白字符,包括空格、制表符、表格 进给,换行。相当于 [ \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u 3000] .

当我编写该函数时,我信任 w3Schools。

第二个更改是将破折号字符 (-) 移至末尾,以避免它的范围分隔符含义。

  • 注 1:这是使用 JavaScript 的服务器端验证。
  • 注2: (针对 IBM Notes XPages)我喜欢 XPage SSJS 中的 javascript。这是 对我来说比 Java 方式更简单。
© www.soinside.com 2019 - 2024. All rights reserved.