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('存在非法字符');
}

后记

JS校验非法字符串

这是一篇 10 个月前的文章,想写的更好一点,但是发现写不出花了,发布得了吧,如果有更好的方法,欢迎留言 :stuck_out_tongue_winking_eye:

本作品采用《CC 协议》,转载必须注明作者和本文链接
感谢阅读,有收获的话不妨点个赞:smiling_imp:
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!