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)
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)
对于任何正在寻找超越 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 | 其他 | 抄送 | 比照| 铯 | 有限公司 | 中文 |