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

Ruby正则gsub处理区域语言时修改用户输入的解决方法

问题解决方法

你的问题出在正则只匹配了Unicode基础字母(\p{Alpha}等价于\p{L}),但像印地语中कं这类字符是基础字母+变音符号的组合(其中ं属于Unicode的\p{M}标记类别),这类变音符号会被你的正则判定为"非字母"并过滤,导致拼写异常。

要保留任意语言的完整字母(包括带变音符号的)以及数字,需要调整正则,同时包含字母、数字和组合标记:

text = 'कंप्यूटर'
# 匹配并移除所有非字母、非数字、非组合标记的字符
regex = /[^\p{L}\p{N}\p{M}]/
filter_text = text.gsub(regex, '')
puts filter_text # 输出 कंप्यूटर,与输入一致

也可以用\p{Alnum}简化(\p{Alnum}等价于\p{L}+\p{N}):

regex = /[^\p{Alnum}\p{M}]/

如果你的需求是保留视觉上的完整字符(字素簇),也可以使用\X匹配字素簇,但注意\X会包含表情符号等其他非字母数字的字符,若需严格过滤,建议使用前者。

内容的提问来源于stack exchange,提问作者Praveenkumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:09:17