如何用Unicode字符实现日文删除线?现有方法显示异常求助
实现日文及亚洲语言的无HTML标签删除线效果
当前通过给每个字符追加半宽删除线组合字符̶(Unicode:\u0336)的方式,仅能正常显示英文等半宽字符的删除线,日文等全宽亚洲语言字符会出现带线方块的异常显示——这是因为半宽删除线标记无法适配全宽字符的排版宽度。
解决方案:区分全宽/半宽字符匹配对应删除线标记
使用全宽删除线组合字符\uFE63(对应字符:︣)适配日文、中文等全宽字符,半宽字符仍保留原半宽删除线标记,修改后的代码如下:
function strike(text) { // 正则匹配全宽字符(覆盖日文、中文、全宽符号等) const isFullWidthChar = char => /[\u4E00-\u9FFF\u3040-\u30FF\uFF00-\uFFEF]/.test(char); return text .split('') .map(char => { return char + (isFullWidthChar(char) ? '\uFE63' : '\u0336'); }) .join(''); } // 测试示例 console.log(strike('this is English strikethrough')); console.log(strike('のスレッドで、スクリーンシ'));
原理说明
- 半宽字符(英文、数字、半宽符号)使用
\u0336,该标记会在字符中间生成适配半宽的删除线; - 全宽亚洲语言字符使用
\uFE63,这是专门针对全宽字符设计的组合删除线标记,能完美贴合全宽字符的宽度,避免出现方块异常。
内容的提问来源于stack exchange,提问作者Darren Gates
相关产品推荐
相关产品推荐

