HarmonyOS 鸿蒙Next inputFilter 无法过滤个别 emoj 表情

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next inputFilter 无法过滤个别 emoj 表情
<markdown _ngcontent-cap-c237="" class="markdownPreContainer">

我的需求是只允许输入中文+英文+数字,我的代码是:

TextInput({ text: this.message })
  .inputFilter("[\u4e00-\u9fffA-Za-z0-9]+") // 正则过滤 只保留汉字+数字+英文大小写
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 4px; right: 8px; font-size: 14px;">复制</button>

但实际效果中部分 emoji 不会被过滤,并且一些标点符号也不会(见下图) 请问有什么好的办法吗?

</markdown>
10 回复
其实也可以在 onChange 方法里自己进行过滤, 过滤好后再拼最终的字符串给到TextInput

我现在是用的这种方式,但总感觉这么做不合适

嗯 这也是无奈之举, 官方的方法存在BUG, 也可以把这个问题反馈给华为, 等待他们在新版本修复

可以试试以下方法

import { TextInput, Text, Column } from '[@ohos](/user/ohos)/tv-ui';
import { Component, State } from '[@ohos](/user/ohos)/tv-ui';

@Entry export class MyApp extends Component { @State message: string = ‘’;

validateInput(input: string): string { const regex = /[^\u4e00-\u9fffA-Za-z0-9]/g; return input.replace(regex, ‘’); }

handleInput(event: any) { this.message = this.validateInput(event.value); }

render() { return ( <Column> <TextInput text={this.message} onChange={(event) => this.handleInput(event)} /> <Text>{this.message}</Text> </Column> ); } } <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

貌似这个属性本身代码对正则表达式的解析不完善,API 9中也是这个问题,NEXT看来也没FIX。
正则不全,继续补充

但是同样的正则在Android 与 iOS 上都是没问题的,这就很奇怪

试试把鸿蒙上不好使的emoji 放到Android 和iOS试试

完全没问题,这是最奇怪的

针对HarmonyOS鸿蒙Next inputFilter无法过滤个别emoji表情的问题,建议检查正则表达式是否全面覆盖了所有需要过滤的emoji范围。HarmonyOS的inputFilter对正则表达式的解析可能存在特定限制,尝试更新到最新版本的HarmonyOS SDK看是否有所改进。如果问题依旧存在,可以考虑在onChange事件中手动过滤并替换这些emoji。如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部