我正在使用条形码扫描仪将2-D数据矩阵,UID条形码读入Web应用程序。 UID包含不可打印的ASCII字符RS,GS和EOT。我的问题是浏览器自动将HTML代码附加到每个ASCII字符的前面,因为没有为RS,GS和EOT定义的HTML代码,它会引发一个拟合。
我正在使用Javascript从扫描的数据中动态构建一个字符串,这里是我得到的样本
091 [041)062> 030RS
如您所见,RS char被赋予一个值(030),该值不作为标准HTML代码存在。另一个问题似乎是当一个普通的字母字符被点击时,浏览器似乎将其视为回车符(CR),因此它们之前的值会被简要显示然后消失。
我希望能够在浏览器文本框中显示整个字符串。我有一个javascript函数,它查找这些不可打印的字符并将它们换成字母,即RS将被替换为“R”和“S”的串联。但我仍然有如上所述的浏览器疯狂的问题。任何见解都表示赞赏。
更新:
嗨马修,抱歉没有更详细。我用替换所有标志尝试了替换函数:
与string.replace(/(030)|(029)|(004)/克, “”);
问题是它取代了整个字符串,所以
091 [041)062> 030RS
成为
/(030)|(029)|(004)/ G
答案 0 :(得分:3)
我不确定我是否完全理解你的问题,但为什么不在字符串上运行替换函数然后再写入DOM呢?如果从不打印不可打印的字符,则不会出现任何问题。
您可以使用正则表达式将不可打印字符与十六进制值匹配。有关详细信息,请查看this。这是一个简单的例子:
uid.replace(/[\x30\x29\x04]/g,"")
(请注意,replace()
函数在字符串实例上调用,而不是在String
本身上调用。)
为了提高效率,请考虑使用一系列不可打印的字符(例如[\x00-\x1F\x80-\xFF]
)。