我想编写一个 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();
}
我想知道:
- 有没有更好的方法来使用 javascript 清理输入?
- 为什么\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/