【发布时间】: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();
}
我想知道:
- 有没有更好的方法来使用 javascript 清理输入?
- 为什么 \n 和 \t 在第一版 RegExp 中不匹配?
【问题讨论】:
-
节省一些时间,不要打扰,在服务器上做。 Javascript 过滤太容易绕过了
-
实际上我正在使用 SSJS 在服务器上执行此操作,因为我在后端使用 XPages。如果我使用的是 Node.js,我也可以这么说。 :)
-
您允许使用
\s换行、制表符等。如果您只想允许空格,请在正则表达式中使用空格。 -
\s并不意味着“空格”。它包括“制表符”、“空格”、“回车”、“换行”、“垂直制表符”和“换页”。 -
@RobG 将其添加为答案,\s 是问题所在。你在 Derek 之前提到过(我也不得不在最后移动连字符)。
标签: javascript regex string xpages sanitization