You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤字符串仅保留含中日等非拉丁语系的字母数字类字符?

解决方案

问题分析

你的现有正则有两个核心问题:

  1. 仅匹配字符串末尾的非法字符(+$限制了匹配范围),中间的非法字符(比如=、表情)不会被处理;
  2. 只包含了中文(\p{Han}),未覆盖日文等其他非拉丁语系字符。

简洁实现

根据需求,我们可以利用Unicode属性类快速实现,以下两种方案任选:

方案1:精准指定保留的字符类别

保留拉丁语字母、数字、中文、日文(平假名/片假名),过滤其他字符:

let string = 'Test=😕查看         カタカナ ひらがな 123';
// 替换所有非法字符为空
string = string.replace(/[^\p{Alnum}\p{Han}\p{Hiragana}\p{Katakana}]/gu, '');
// 若需将连续非法字符替换为单个空格,用这个:
// string = string.replace(/[^\p{Alnum}\p{Han}\p{Hiragana}\p{Katakana}]+/gu, ' ');
console.log(string); // 输出:Test查看カタカナひらがな123

方案2:宽泛匹配所有语言的字母数字(更简洁)

\p{Alnum}是Unicode属性类,自动匹配所有语言的字母和数字(包括中文、日文、韩文等),完全满足你的需求:

let string = 'Test=😕查看         カタカナ ひらがな 123';
string = string.replace(/[^\p{Alnum}]/gu, '');
// 如需保留空格,可改为 /[^\p{Alnum}\s]/gu
console.log(string); // 输出:Test查看カタカナひらがな123

关键说明

  • u修饰符必须添加,否则无法识别Unicode属性类;
  • g修饰符实现全局匹配,确保所有位置的非法字符都被处理;
  • 如果需要保留特定符号(比如空格),直接将其加入正则的允许字符集即可。

内容的提问来源于stack exchange,提问作者Mr. Jo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:18:19