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

标签 javascript regex string xpages sanitization

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

它必须只允许以下字符:

  • 字母数字字符(不区分大小写):[a-z][0-9]。
  • 内部空白,如“word1 word2”。
  • 西类牙字符(不区分大小写):[áéíóúñü]。
  • 下划线和连字符 [_-]。
  • 点和逗号 [.,].
  • 最后,必须使用 trim() 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 中不匹配?

最佳答案

sanitizeString 函数的新版本:

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

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

Find a whitespace character

这意味着什么 MDN says

Matches a single white space character, including space, tab, form feed, line feed. Equivalent to [ \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 方式更简单。

关于javascript - 有没有更好的方法来使用 javascript 清理输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23187013/

相关文章:

javascript - 如何替换除 JavaScript 中第一个字符串之外的所有字符串?

c++ - 列表 - 字符串 - 文本文件

c# - String.GetHashCode() 返回不同的值

javascript - 数据库集群-异步任务

javascript - 使用translatePartialLoader时如何解决 Angular 翻译FOUC问题?

regex - R:如何用/替换\\?

python - PLY 的词法分析器支持 "maximal munch"吗?

正则表达式 URL 提取斜杠

javascript - OnChange 和 Click 同时进行

javascript - slideToggle 将 div 向上移动到内容上方