如何验证角度国家的手机号码?

时间:2018-12-27 05:34:22

标签: javascript regex angular

在这里,我对使用以下正则表达式(/^(\+\d{1,3}[- ]?)?\d{10}$/)的以下国家/地区的代码进行通用验证,适用于所有国家/地区,但我不接受此类型的数字((+91)987654321009876543210

这种类型的手机号码可以接受

+91 9876543210 (or all other country code)

(+91) 9876543210

(+91)9876543210

+919876543210

+91-9876543210

(+91)-9876543210

9876543210

09876543210

不接受数字

++91 9876543210(double ++),

+91  9876543210(double spaces),

+91 987 65   7 4 688(not more than one space),

+91 808-75-74-678(not more than one -),

+91-846363,

80873(number less than 10 digit),

8087339090456(number greater than 10 digit),

0000000000(all zeros),

+91 0000000(all zeros with country code)

HTML

<mat-form-field>
  <input matInput placeholder="Enter contact No." [(ngModel)]="userObj.contactno" name="contactNo" required>
</mat-form-field>
<button mat-button color="primary" (click)="saveNewCustomerDetails()">SAVE</button>

TS

   saveNewCustomerDetails(){
     if(this.userObj.contactno.match(/^(\+\d{1,3}[- ]?)?\d{10}$/)){
        console.log("valid mobile number");
     }else{
        console.log("Invalid mobile number");
     }
   }

3 个答案:

答案 0 :(得分:1)

您的模式看起来正确,不知道为什么拒绝,可以尝试一次

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

也许会起作用

答案 1 :(得分:1)

您需要在正则表达式中包含文字括号,该括号可以可选地存在,并且由于它们具有特殊含义,因此您需要在正则表达式中对其进行转义。

看到您的最后一个手机号码09876543210,如果没有国家/地区代码,则似乎可以选择在数字前加零,因此您可以在国家/地区代码部分中使用零。

最后,就像您不想只支持全零的数字一样,您可以在正则表达式中(?!0+$)前面有一个否定的外观。更新后的正则表达式将变为

^(?!0+$)(?:\(?\+\d{1,3}\)?[- ]?|0)?\d{10}$

Live Demo

此外,如果您不想支持仅使用相同数字的数字,例如22222222225555555555,则您的否定前瞻需要写成(?!(\d)\1+$),而正则表达式将成为

^(?!(\d)\1+$)(?:\(?\+\d{1,3}\)?[- ]?|0)?\d{10}$

Demo for this updated regex

验证手机号码的另一种方法是,替换所有不是数字的内容,并去除号码中所有前导零,然后剩下的将是纯手机号码,您可以进一步验证该号码。但是那里可能有某些缺点,因为可能很难弄清楚国家代码以及该数字是否确实有效。因为某些数字可能少于十位数,并且实际上可能是无效的,但是如果它们属于像新加坡这样的国家(我猜有八位数字),则它们可能是有效的。同样,如果您所在国家/地区的本地号码有11位数字,那么您可能会遇到麻烦。

答案 2 :(得分:1)

您可以尝试一下。

^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$

这对我有用。