带或不带国家代码的手机号正则表达式

22

我需要在我的注册表单中验证一个文本字段,我想要一个正则表达式。

文本框将接受手机号码,例如9999999999(10位数字 - 以7或8或9开头)。 用户还可以写成+919999999999,其中+91是国家代码(印度的+91,但也可以接受像+110或+52这样的其他代码),或者他也可以写成09999999999(首位0代表本国)

在这里,用户有3个选择:

  1. 添加带有国家代码的手机号码
  2. 只填写没有国家代码或以0开头的手机号码
  3. 在手机号码前面加上0。

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


1
并非所有的手机号码都以7、8或9开头,我的是以4开头的。它们也不全都是10位数字,我的只有9位。 - RobG
7个回答

28

据我所见,这应该可以正常工作。前缀是可选的,并存储在第一个匹配组中,主要数字存储在第二个组中。

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

但如果您能为每种情况提供一些测试用例,那么将有助于我们为您提供所需的工作正则表达式。

感谢SchlaWiener 在评论中正确指出了国家代码长度的限制。


这也将匹配 +1234567999999999 ;) - Jürgen Steinblock
@SchlaWiener 是的-他没有指定区号可以被视为有效的时间限制,所以我只将其保留为“至少跟随+一个数字”。将第一节更改为^([0|\+[0-9]{123,456})?并将123替换为最小长度,将456替换为最大长度即可解决这个问题。 - Joe
你说得对,他没有指定限制。然而维基百科有:http://en.wikipedia.org/wiki/List_of_country_calling_codes 所以应该是\d{1,5} - Jürgen Steinblock
1
无论特定的国家代码如何,此 ^([0|\+[0-9]{1,5})?([0-9]{10})$ 也适用于通用电话号码。 - sohaiby
^([0|\+[0-9]{1,5})?([7-9][0-9]{9})$ 正则表达式中,我认为在开头的 0 前面不需要加上 [ - Shridhar Sagari
显示剩余4条评论

15

用于印度手机号码验证的简单正则表达式:/^[0]?[6789]\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();
    }

}

1
现在印度手机号码的第一位也可以是数字6,因此请使用“/^[0]?[6789]\d{9}$/”。 - Shubham P

4

请尝试以下操作:

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;
    }    
}

你能在你的回答中加入一些解释吗? - executable
2
虽然这段代码可能回答了问题,但最好还是解释/支持一下。 - double-beep

3

对于印度手机号码,以下正则表达式也适用:
^[6-9]\d{9}$
if (! /^[6-9]\d{9}$/.test(mobile_no)) { // 在此处添加错误代码 }
http://fiddly.org
- Amit

2

验证手机号码 - 请使用以下正则表达式

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;
}

请参考附带的截图。
请点击enter image description here查看。

2

您还可以使用字符串操作来实现。请查看此链接

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

结果将会是+91

0
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
       }
 }

你还可以在更多的示例链接中查看 点击这里

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接