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

Angular输入框首8位替换为X后,未掩码值显示异常求助

Angular输入掩码问题:原始值被覆盖为掩码内容的解决方法

你的问题核心在于:输入框绑定显示的是掩码后的maskedInput,所以event.target.value拿到的是已经替换为X的内容,而非用户实际输入的原始字符,导致unmaskedInput被错误赋值成掩码版本。

以下是修正后的实现:

HTML 代码

<input type="text" [value]="maskedInput" (input)="onInput($event)" maxlength="12">
<p>Masked: {{ maskedInput }}</p>
<p>Unmasked: {{ unmaskedInput }}</p>

TypeScript 代码

maskedInput: string = '';
unmaskedInput: string = '';

onInput(event: InputEvent) {
  const inputElement = event.target as HTMLInputElement;
  
  // 处理字符新增
  if (event.data) {
    if (this.unmaskedInput.length < 12) {
      this.unmaskedInput += event.data;
    }
  } 
  // 处理字符删除(退格/删除键)
  else {
    this.unmaskedInput = this.unmaskedInput.slice(0, -1);
  }

  // 生成掩码内容:前8位替换为X,保留后4位
  const maskedPrefix = this.unmaskedInput.slice(0, 8).replace(/./g, 'X');
  const visibleSuffix = this.unmaskedInput.slice(8);
  this.maskedInput = maskedPrefix + visibleSuffix;

  // 同步光标位置,避免输入时光标跳回开头
  setTimeout(() => {
    inputElement.setSelectionRange(this.maskedInput.length, this.maskedInput.length);
  }, 0);
}

关键调整说明

  1. 直接维护unmaskedInput作为真实输入值:通过event.data判断用户是新增还是删除字符,手动更新原始值,不再依赖输入框的掩码内容。
  2. 掩码生成逻辑基于真实值:从unmaskedInput截取前8位替换为X,拼接后4位得到显示用的maskedInput。
  3. 光标位置修复:添加了光标同步逻辑,解决输入时光标自动跳回开头的体验问题。

如果只需要对数字字符替换为X,把正则/./g改回/\d/g即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:22:18