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

jQuery手机号按键验证需求:支持08/+62开头及长度限制

jQuery实现手机号输入验证(08/+62开头+长度限制)

嘿,我来帮你完善这个手机号输入的验证逻辑!刚好可以用jQuery轻松实现你要的两种开头规则,还能处理长度超限的提示。

先看完整实现

HTML结构

首先准备输入框和错误提示元素:

<input type="text" id="phone-input" placeholder="请输入手机号(08或+62开头)">
<div id="error-tip" style="color: #dc3545; margin-top: 8px; display: none;"></div>

jQuery验证代码

把这段代码放到你的脚本里(确保已经引入jQuery):

$(document).ready(function() {
  // 处理按键输入事件
  $('#phone-input').on('keypress', function(e) {
    // 允许必要的控制键:退格、删除、Tab、回车、Esc等,还有Ctrl快捷键
    if ($.inArray(e.which, [8, 9, 13, 27, 46]) !== -1 || 
        (e.which === 65 && e.ctrlKey) || 
        (e.which === 67 && e.ctrlKey) || 
        (e.which === 86 && e.ctrlKey) || 
        (e.which === 88 && e.ctrlKey)) {
      return;
    }

    const currentVal = $(this).val();
    const newChar = String.fromCharCode(e.which);
    const newVal = currentVal + newChar;
    const $errorTip = $('#error-tip');

    // 第一步:检查输入后长度是否超过14位
    if (newVal.length > 14) {
      $errorTip.text('输入长度不能超过14位').show();
      e.preventDefault(); // 阻止继续输入
      return;
    }

    // 第二步:分阶段验证格式
    // 输入过程中(长度<8):只验证开头是否合法,后面只能是数字
    const partialPattern = /^(08|\+62)\d*$/;
    // 长度达标后:验证完整格式(开头+数字长度符合总8-14位)
    const fullPattern = /^(08\d{6,12}|\+62\d{5,11})$/;

    if (newVal.length >= 8) {
      if (!fullPattern.test(newVal)) {
        $errorTip.text('请输入以08或+62开头,长度8-14位的号码').show();
        e.preventDefault();
        return;
      }
    } else {
      if (!partialPattern.test(newVal)) {
        $errorTip.text('号码必须以08或+62开头').show();
        e.preventDefault();
        return;
      }
    }

    // 验证通过,隐藏错误提示
    $errorTip.hide();
  });

  // 额外处理粘贴事件,防止粘贴不符合规则的内容
  $('#phone-input').on('paste', function() {
    const $errorTip = $('#error-tip');
    setTimeout(() => {
      const pastedVal = $(this).val();
      const fullPattern = /^(08\d{6,12}|\+62\d{5,11})$/;
      if (!fullPattern.test(pastedVal)) {
        $errorTip.text('请粘贴以08或+62开头,长度8-14位的号码').show();
        $(this).val(''); // 清空无效内容
      } else {
        $errorTip.hide();
      }
    }, 100);
  });
});

代码逻辑解释

  1. 控制键放行:先允许退格、删除、Tab等必要操作,还有Ctrl+A/C/V/X这些快捷键,避免影响用户正常输入体验。
  2. 长度超限拦截:预判输入后的总长度,超过14位直接提示并阻止输入。
  3. 分阶段验证:
    • 输入初期(长度<8):只验证开头是否是08或+62,并且后续只能输入数字,避免用户一开始就输入错误格式。
    • 长度达标后(>=8):验证完整格式,确保08开头后有6-12位数字(总长度8-14),+62开头后有5-11位数字(总长度8-14)。
  4. 粘贴处理:额外监听粘贴事件,防止用户粘贴不符合规则的内容,粘贴后立即验证,无效则清空并提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:42:30