【问题标题】:Regex for Mobile Number with or without Country Code带有或不带国家代码的手机号码的正则表达式
【发布时间】:2026-02-13 20:10:02
【问题描述】:

我需要验证我想要 Regex 的注册表单中的文本字段。

文本框将接受手机号码,例如 9999999999(10 位数字 - 以 7、8 或 9 开头)。 用户也可以写 +919999999999,其中 +91 是国家代码(+91 表示印度,但可以接受任何其他值,例如 +110 或 +52),或者他也可以写 09999999999(第一个 0 表示本国)

这里,用户有3个选择,

  1. 添加带有国家代码的手机号码
  2. 只是没有国家代码或0前缀
  3. 手机号码前加零。

虽然不是必需的,但我的页面在 asp.net 中,并且我使用的是内置的正则表达式验证器。

【问题讨论】:

  • 并非所有手机号码都以 7、8 或 9 开头。我的以 4 开头。也不是都是 10 位数,我的是 9。

标签: javascript regex validation


【解决方案1】:

用于手机号码验证 - 请使用此正则表达式

var mobile_number = 9867345673;   // return true
var mobile_number = 1234566667;   // return false
var mob_regex = /^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$/;
if(mob_regex.test(mobile_number)){
   return true;
} else {
   return false;
}

请参阅随附的屏幕截图以供参考。

【讨论】:

    【解决方案2】:

    尝试以下操作:

    function validateMobile(mobilenumber) {   
        var regmm='^([0|+[0-9]{1,5})?([7-9][0-9]{9})$';
        var regmob = new RegExp(regmm);
        if(regmob.test(mobilenumber)){
            return true;
        } else {
            return false;
        }    
    }
    

    【讨论】:

    • 你能在你的答案中添加一些解释
    • 虽然这段代码可能回答了这个问题,但解释/支持它总是好的。
    【解决方案3】:

    印度手机号码验证的简单正则表达式:/^[0]?[789]\d{9}$/

    支持 08888888888(加零) 7878787878,8634456876,9545559877(任何手机号码前加7,8,9后加其他9位)

    功能齐全

    function mobileNumber(){
    
         var Number = document.getElementById('YOUR ELEMENT ID').value;
         var IndNum = /^[0]?[789]\d{9}$/;
    
         if(IndNum.test(Number)){
            return;
        }
    
        else{
            $('#errMessage').text('please enter valid mobile number');
            document.getElementById('profile_telephoneNumber').focus();
        }
    
    }
    

    【讨论】:

    • 使用/^[0]?[6789]\d{9}$/ ,因为现在印度手机号码也可以以数字 6 开头。
    【解决方案4】:
    if(document.getElementById('mobile_number').value != ""){
    
           var y = document.getElementById('mobile_number').value;
           if(isNaN(y)||y.indexOf(" ")!=-1)
           {
              alert("Invalid Mobile No.");
              document.getElementById('mobile_number').focus();
              return false;
           }
    
           if (y.length>10 || y.length<10)
           {
                alert("Mobile No. should be 10 digit");
                document.getElementById('mobile_number').focus();
                return false;
           }
           if (!(y.charAt(0)=="9" || y.charAt(0)=="8"))
           {
                alert("Mobile No. should start with 9 or 8 ");
                document.getElementById('mobile_number').focus();
                return false
           }
     }
    

    您还可以在更多示例链接中查看 click here

    http://p2p.wrox.com/javascript-how/64920-validation-phone-number-mobile-number.html

    【讨论】:

      【解决方案5】:

      这应该可以解决问题:

      ^(\+[\d]{1,5}|0)?[7-9]\d{9}$
      

      http://fiddle.re/av1k

      【讨论】:

      • 对于印度手机号码,以下正则表达式也适用^[6-9]\d{9}$if (! /^[6-9]\d{9}$/.test(mobile_no)) { // Error code here }http://fiddly.org
      【解决方案6】:

      据我所知,这应该可行。前缀是可选的,存储在第一个匹配组中,主号码进入第二组。

      ^([0|\+[0-9]{1,5})?([7-9][0-9]{9})$
      

      但是,如果您可以为每个测试用例提供一些测试用例,这将有助于我们为您提供所需的工作正则表达式。

      向 cmets 中的 SchlaWiener 提出正确的国家代码长度限制。

      【讨论】:

      • 这也将匹配+1234567999999999 ;)
      • @SchlaWiener 是的 - 他没有指定任何关于区号有效时长的限制,所以我只是将其保留为“+ 后至少有一个数字”。将第一部分更改为 ^([0|\+[0-9]{123,456})? 并将 123 替换为最小长度,将 456 替换为最大长度将解决此问题
      • 好的,谢谢@SchlaWiener 和 Joe 再次更新,Joe 是正确的,我没有提到最大/最小尺寸,但我确实需要它。所以,干杯..
      • 你说得对,他没有指定限制。但是*确实如此:en.wikipedia.org/wiki/List_of_country_calling_codes 所以它应该是\d{1,5}
      • 无论任何特定的国家代码,这个^([0|\+[0-9]{1,5})?([0-9]{10})$ 也适用于通用电话号码
      【解决方案7】:

      您也可以使用字符串操作来做到这一点。检查这个link

      str = "+919999999999"
      cc = str.split(str.slice(-10))[0]
      

      结果将是+91

      【讨论】: