我的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");
}
});
});
5条答案
按热度按时间ojsjcaue1#
要将不属于可打印基本ASCII范围的字符作为目标,可以使用以下简单正则表达式:
说明:在ASCII表的前128个字符中,可打印范围以空格字符开始,以波浪号结束。这些字符是要保留的字符。该范围用
[ -~]
表示,不在该范围内的字符用[^ -~]
表示。这些字符是要替换的字符。因此:3df52oht2#
无需测试,直接处理文本框内容即可:
其中范围
\x20-\x7E
覆盖ASCII表的可打印部分。代码示例:
ocebsuys3#
如果您正在寻找一个超越ascii的解决方案,并且不需要去除Unicode字符,请阅读以下内容:
在www.example.com上定义了各种unicode类标识符(例如,
Zl
表示行分隔符)https://www.unicode.org/reports/tr44/#GC_Values_Table,如下所示:| 缩写|长|项目名称|
| - -|- -|- -|
| 吕|大写字母(_L)|大写字母|
| 我|小写字母(_L)|小写字母|
| 左侧|标题大小写_字母|一种二合字符,第一部分大写|
| 液相色谱|大小写字母|卢|利|左|
| 长度|修饰符_字母|修饰字母|
| 洛|其他_信函|其他字母,包括音节和表意文字|
| 左|信函|卢|力||林|卢|
| 锰|无间距标记(_M)|无间隔组合标记(零前进宽度)|
| 麦克|间距标记(_M)|间隔组合标记(正前进宽度)|
| 我|封闭标记(_M)|封闭组合标记|
| 米|标记|锰|Mc| Me|
| 钕|十进制数字(_N)|十进制数字|
| 无|信函编号(_N)|字母状数字字符|
| 没有|其他_号码|其他类型的数字字符|
| 不|编号|Nd| Nl|编号|
| 个人电脑|连接符_标点|连接标点符号,如领带|
| 钯|破折号_标点符号|破折号或连字符标点符号|
| Ps级|打开标点(_P)|(一对的)开头标点符号|
| 平|关闭标点符号(_P)|结束标点符号|
| 圆周率|首字母标点(_P)|首引号|
| 功率因数|结尾标点符号(_P)|最后的引号|
| 波|其他_标点符号|其他类型标点符号|
| P值|标点符号|Pc| Pd| Ps| Pe| Pi| Pf| Po(峰峰值)|
| 钐|数学符号(_S)|数学符号|
| 扫描|货币_符号|货币符号|
| 斯克|修饰符符号(_S)|非字母状修饰符符号|
| 所以|其他符号(_S)|其他类型符号|
| 标准|符号|史|史||苏|
| Z值|空格_分隔符|空格字符(各种非零宽度)|
| Zl语言|行分隔符(_S)|仅U+2028线路分离器|
| Zp值|段落分隔符(_S)|仅U+2029段落分隔符|
| Z轴|分隔符|Zs| Zl| Zp|
| 副本|对照组|C 0或C1控制代码|
| 对比系数|格式Name|格式控制字符|
| 铯|替代|代理代码点|
| 科|私人使用(_U)|私用字符|
| 中国|未分配|保留的未分配码位或非字符|
| C语言|其他|Cc| Cf| Cs|公司|Cn|
ttvkxqim4#
您必须将一个模式(而不是字符串)赋给
isNonAscii
变量,然后使用test()
检查它是否匹配。test()
返回true或false。检查jsFiddle
hrysbysz5#
对于那些谁有这个问题,并正在寻找一个'修复所有'的解决方案...这是我最终修复它的方式:
我将为那些经验不足的人更详细地介绍一下:
1.我们首先遍历整个字符串的每个字符,并使用char的IsControl方法来确定某个字符是否是控制字符。
1.如果找到控制字符,将匹配的字符复制到字符串中,然后使用Replace方法将控制字符更改为空字符串。对字符串的其余部分重复上述步骤。
1.一旦我们循环遍历了整个字符串,我们就使用定义的正则表达式(它将匹配任何不是控制字符或标准ASCII字符的字符),并再次用空字符串替换匹配的字符。在while循环中这样做意味着,只要charMatch为真,字符就会被替换。
1.最后,删除所有字符并循环整个字符串后,返回inString。
(Note:我还没有想好如何用新修改的inString值重新填充TextBox,所以如果有人能指出如何完成这一点,那就太好了)