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

澳大利亚手机号输入:如何用正则实现实时动态分割?

解决方案:实时格式化澳大利亚手机号输入

我明白你的需求——你想要澳大利亚手机号(10位、以04开头)在输入过程中就实时分段,而不是等输完10位才格式化。原来的正则只能处理完整的号码,确实不够灵活,这里给你一个能实时响应输入的解决方案:

核心格式化函数

这个函数会处理输入过程中的每一步,根据当前输入长度自动添加空格分隔:

function formatAusPhone(input) {
  // 先过滤掉所有非数字字符,确保只处理有效数字
  const cleanedInput = input.replace(/\D/g, '');
  // 匹配以04开头的数字,分三个捕获组处理分段
  return cleanedInput.replace(/^04(\d{0,2})(\d{0,3})(\d{0,3})$/, (match, group1, group2, group3) => {
    let formatted = '04';
    
    // 处理前两位(凑成04XX)
    if (group1) formatted += group1;
    // 当输入到第4位时,添加第一个空格
    if (group1.length === 2) formatted += ' ';
    
    // 处理中间三位
    if (group2) formatted += group2;
    // 当输入到第7位时,添加第二个空格
    if (group2.length === 3) formatted += ' ';
    
    // 处理最后三位
    if (group3) formatted += group3;
    
    return formatted;
  });
}

如何实时应用到输入框

把这个函数绑定到输入框的input事件上,就能在用户输入时自动格式化:

const phoneInput = document.getElementById('aus-phone-input');
phoneInput.addEventListener('input', (e) => {
  e.target.value = formatAusPhone(e.target.value);
});

效果说明

这个方案会在输入过程中实时更新显示:

  • 输入到第4位(比如0411):显示 0411
  • 输入第5位(比如04111):显示 0411 1
  • 输入到第7位(比如0411111):显示 0411 111
  • 输入完整10位:显示 0411 111 111

为什么这个方案可行?

和你原来的正则不同,这个方案的正则匹配所有以04开头、长度0-10位的数字序列,通过捕获组和回调函数动态拼接结果,根据当前输入的长度决定是否添加分隔空格,完美覆盖输入过程中的每一个阶段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:05:36