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

如何在onBlur时移除字符串首次短横线并匹配指定正则

输入框格式处理与验证实现方案

我有一个支持粘贴/手动输入的字符串输入框,要求输入内容遵循xxx-A-mmddyyyy-xxxxxx格式。需要在onBlur()事件触发时,自动移除字符串中首次出现的短横线,将格式转为xxxA-mmddyyyy-xxxxxx;同时要用给定的正则规则限制输入格式,现有两个正则:

public static readonly NUMBERWITHDASH = /^[0-9]{3}-[A-Z]-[0-9]{8}-[0-9]{6}$/;
public static readonly NUMBERNODASH = /^[0-9]{3}[A-Z]-[0-9]{8}-[0-9]{6}$/;

1. 实现onBlur处理函数

直接用正则精准定位并替换第一个短横线,同时结合正则验证格式:

handleInputBlur(event: Event) {
  const input = event.target as HTMLInputElement;
  let val = input.value.trim();

  // 匹配原始格式则移除第一个短横线
  if (YourClassName.NUMBERWITHDASH.test(val)) {
    // 捕获前3位数字,去掉后面的短横线
    val = val.replace(/^(\d{3})-/, '$1');
    input.value = val;
  }
  // 格式既不符合原始也不符合目标格式,做错误处理
  else if (!YourClassName.NUMBERNODASH.test(val)) {
    input.value = '';
    alert('输入格式错误,请按xxx-A-mmddyyyy-xxxxxx格式填写');
  }
}

2. 输入过程中的格式限制(可选)

如果要在用户输入时就限制非法字符,可以加个input事件处理:

handleInputChange(event: Event) {
  const input = event.target as HTMLInputElement;
  // 只保留数字、大写字母和短横线,同时限制总长度(原始格式最长20位)
  input.value = input.value.replace(/[^0-9A-Z-]/g, '').slice(0, 20);
}

3. 正则规则说明

  • NUMBERWITHDASH:校验用户输入的原始格式,确保是3位数字+短横线+大写字母+短横线+8位日期数字+短横线+6位数字。
  • NUMBERNODASH:校验处理后的目标格式,确保是3位数字直接拼接大写字母,后面的短横线和数字段保持不变。

内容的提问来源于stack exchange,提问作者Peter The Angular Dude

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:03:12