我想编写一个 JavaScript 函数来清理用户输入并删除任何不需要的和危险的字符。
它必须仅允许以下字符:
我的第一次尝试是:
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();
}
我想知道:
新版本的 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。
第二个更改是将破折号字符 (-) 移至末尾,以避免它的范围分隔符含义。