我已经浪费了大量的时间来处理字符串(由其他源生成),我发现问题是字符串中有不可打印的字符。今天我来处理javascript。有人知道如何在javascript中替换不可打印的unicode字符吗?
我在这里发现了类似的东西:
How can I replace non-printable Unicode characters in Java?my_string.replaceAll("\\p{C}", "?");
和此处:
Non-ascii characters added form input only with Safari Browserfilename.replace(/[^a-z0-9\.]+/gi, "");
最后一个选项替换所有不在括号中的字符。无论我在用什么语言工作,这个选项总是让我头疼,我已经厌倦了试图找出哪些字符弄乱了我的代码。出于这个原因,我希望能够将所有不可见的字符替换为可见的字符,这样我以后就可以完全删除它们。
3条答案
按热度按时间zzwlnbp81#
基于java中的
\p{C}
(来自XRegExp):您也可以只使用library
mkh04yzy2#
最佳实践似乎要求您指定您将接受的内容(白名单方法),而不是试图过滤掉您不接受的内容(黑名单方法)。
This是一个类似的问题,尽管答案并不全面。
tgabmvqs3#
使用Unicode category matching:
在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|