JS 校验非法字符串
前言
不可见字符被用户输入最终入库,一开始以为只是没有去字符串空格,排查才发现是不可见字符,要求用 JS 对输入字符串做个校验,记录一下,欢迎留言。
思路
- V1
只是为了检查不可见字符,一开始考虑的是只允许键盘上的数字、字母、符号和常用汉字,但是枚举键盘的符号时,发现实在是太多了,到最后也没想到什么好办法。
- V2
检查发现中文的范围给的范围太小了,扩大了汉字的范围。
- V3
又发现用户使用的时候提示有非法字符串,但是却找不到,于是增加了一个控制台输出。
上代码
/**
* 特殊符号校验方法
* @returns {boolean}
*/
String.prototype.checkString = function () {
let rule = [
'[\\u4e00-\\u9fa5]',
'[\\w\\.\\:<>/ -]',
'[~!@【】、?,。:《》…—‘’”“]',
'[+\\*;\\·#¥%&=\\|\\{\\}()`,?;\']',
'[\\r\\n]',
'[\\u3400-\\u4DB5]',
'[\\u20000-\\u2A6D6]',
'[\\u2A700-\\u2B734]',
'[\\u2B740-\\u2B81D]',
'[\\u2F00-\\u2FD5]',
'[\\u2E80-\\u2EF3]',
'[\\uF900-\\uFAD9]',
'[\\u2F800-\\u2FA1D]',
'[\\u31C0-\\u31E3]',
'[\\uff1d]',
];
if (!this.toString()) {
return true
}
//本来这里用的英文逗号分割字符串,后面发现用户也需要输入
//一时之间找不到好的分割符号 使用了下划线
let arr = this.toString().replace(/(.)(?=[^$])/g, "$1_").split("_");
let check_result = arr.map(function (x) {
return rule.map(o => {
return (x.search(o) === 0);
});
});
let result = check_result.map(function (currentValue) {
return currentValue.some(function (item) {
return item === true;
});
});
if (result.includes(false)) {
for (var ident in result){
if(result[ident] === false){
console.log(arr[ident])
}
}
return false;
}
return true;
};
使用
let input_str = $('#input_str').val();
if (!input_str.checkString()) {
console.log('存在非法字符');
}
后记
这是一篇 10 个月前的文章,想写的更好一点,但是发现写不出花了,发布得了吧,如果有更好的方法,欢迎留言
本作品采用《CC 协议》,转载必须注明作者和本文链接