HarmonyOS鸿蒙Next中禁止TextInput输入/ &和emoji的方案
HarmonyOS鸿蒙Next中禁止TextInput输入/ &和emoji的方案
import { promptAction } from '@kit.ArkUI';
@Component
struct Page05 {
oldText: string = "";
@State text: string = '';
controller: TextInputController = new TextInputController();
private emojiRegex = /(\u00a9|\u00ae|[\u2000-\u3300]|[\uD83C-\uD83E][\uDC00-\uDFFF]|[\uD83E][\uDD00-\uDDFF])/g;
build() {
Column() {
TextInput({ text: this.text, controller: this.controller })
.width('95%')
.height(40)
.margin(20)
.onChange((value: string) => {
console.info(`value:${value}`)
if (this.emojiRegex.test(value) || value.indexOf('/') != -1 || value.indexOf('&') != -1) {
promptAction.showToast({ message: '不能包含表情符号!', alignment: Alignment.Center })
this.text = this.oldText
} else {
this.text = this.oldText = value
}
})
}
}
}
建议使用onChange,虽然会闪一下,但是能解决问题。不建议使用onWillInsert,因为用户换输入法的时候就会失效。
更多关于HarmonyOS鸿蒙Next中禁止TextInput输入/ &和emoji的方案的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
在HarmonyOS Next中,可以通过正则表达式结合TextInput的onChange事件实现输入限制。您提供的方案已经比较完善,这里补充几点优化建议:
- 正则表达式可以简化为:
private emojiRegex = /[\uD83C-\uD83E][\uDC00-\uDFFF]|[\u2000-\u3300]|[\u00a9\u00ae]/g;
- 对于特殊字符检测,可以使用更高效的方式:
if (this.emojiRegex.test(value) || /[\/&]/.test(value)) {
// 处理非法输入
}
- 性能优化:可以缓存上一次的合法值,避免频繁更新:
@State lastValidText: string = '';
- 错误提示可以更明确:
promptAction.showToast({
message: '不能包含表情符号或特殊字符(/&)',
alignment: Alignment.Center
})
这种方案虽然会有短暂的回显,但在用户体验和功能实现上是最可靠的。