匹配不可打印/非ascii字符并从文本中删除

Gra*_*ole 21 javascript regex control-characters

我的JavaScript非常生疏,所以对此的任何帮助都会很棒.我要求检测不可打印的字符(控制字符,如SOH,BS等)以及扩展的ascii字符,如字符串中的Ž并删除它们但我不知道如何编写代码?

任何人都能指出我正确的方向来解决这个问题吗?这是我到目前为止:

$(document).ready(function() {
    $('.jsTextArea').blur(function() {
        var pattern = /[^\000-\031]+/gi;
        var val = $(this).val();
        if (pattern.test(val)) {    
        for (var i = 0; i < val.length; i++) {
            var res = val.charAt([i]);
                alert("Character " + [i] + " " + res);              
        }          
    }
    else {
         alert("It failed");
     }

    });
});
Run Code Online (Sandbox Code Playgroud)

zx8*_*x81 49

要定位不属于可打印基本ASCII范围的字符,可以使用这个简单的正则表达式:

[^ -~]+
Run Code Online (Sandbox Code Playgroud)

说明:在ASCII表的前128个字符中,可打印范围以空格字符开头,以波浪号结束.这些是您要保留的字符.该范围用[ -~],表示不在该范围内的字符[^ -~].这些是我们想要替换的.因此:

result = string.replace(/[^ -~]+/g, "");
Run Code Online (Sandbox Code Playgroud)

  • 这确实更简单. (2认同)

Cas*_*yte 34

无需测试,可以直接处理文本框内容:

textBoxContent = textBoxContent.replace(/[^\x20-\x7E]+/g, '');
Run Code Online (Sandbox Code Playgroud)

范围\x20-\x7E涵盖ascii表的可打印部分.

代码示例:

$('.jsTextArea').blur(function() {
    this.value = this.value.replace(/[^\x20-\x7E]+/g, '');
});
Run Code Online (Sandbox Code Playgroud)


mwa*_*wag 7

对于任何正在寻找超越 ascii 且不删除 Unicode 字符的解决方案的人:

function stripNonPrintableAndNormalize(text) {
    // strip control chars
    text = text.replace(/\p{C}/gu, '');

    // other common tasks are to normalize newlines and other whitespace

    // normalize newline
    text = text.replace(/\n\r/g, '\n');
    text = text.replace(/\p{Zl}/gu, '\n');
    text = text.replace(/\p{Zp}/gu, '\n');

    // normalize space
    text = text.replace(/\p{Zs}/gu, ' ');

    return text;
}
Run Code Online (Sandbox Code Playgroud)

各种 unicode 类标识符(例如行分隔符)在https://www.unicode.org/reports/tr44/#GC_Values_TableZl中定义,如下所示:

缩写 长的 描述
大写字母 一个大写字母
小写字母 一个小写字母
LT Titlecase_字母 双字字符,第一部分大写
液相色谱 装箱信 卢 | Ll | LT
勒姆 修饰符_字母 修饰字母
其他_信件 其他字母,包括音节和表意文字
L 卢 | Ll | LT | LM | 洛
非间距_标记 非间距组合标记(零前进宽度)
麦克 间距_标记 间距组合标记(正前进宽度)
封闭_标记 封闭的组合标记
中号 标记 锰| 麦克 | 我
小数_数字 一个十进制数字
字母_数字 类似字母的数字字符
其他号码 其他类型的数字字符
数字 ND | 尼| 不
个人电脑 连接器_标点符号 连接标点符号,如领带
Dash_标点符号 破折号或连字符标点符号
PS 打开_标点符号 (一对)开头标点符号
关闭_标点符号 (一对)结束标点符号
圆周率 初始标点符号 开头的引号
普夫 Final_标点符号 最后的引号
其他_标点符号 其他类型的标点符号
标点 电脑| 钯| 附:| 佩| 圆周率 | 普夫| 宝
数学符号 数学应用的符号
货币_符号 货币符号
斯克 修饰符_符号 非字母修饰符号
所以 其他_符号 其他类型的符号
S 象征 SM | 科学| SK | 所以
Zs 空格分隔符 空格字符(各种非零宽度)
Zl 行分隔符 仅 U+2028 行分隔符
Zp 段落分隔符 U+2029 仅段落分隔符
Z 分隔器 Zs | Zl | Zp
抄送 控制 C0 或 C1 控制代码
CF 格式 格式控制字符
CS 代理人 代理代码点
私人使用 私人使用的角色
中文 未分配 保留的未分配代码点或非字符
C 其他 抄送 | 比照| 铯 | 有限公司 | 中文