在这里,我对使用以下正则表达式(/^(\+\d{1,3}[- ]?)?\d{10}$/
)的以下国家/地区的代码进行通用验证,适用于所有国家/地区,但我不接受此类型的数字((+91)9876543210
或09876543210
)
这种类型的手机号码可以接受
+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");
}
}
答案 0 :(得分:1)
您的模式看起来正确,不知道为什么拒绝,可以尝试一次
^(\+[\d]{1,5}|0)?[7-9]\d{9}$
也许会起作用
答案 1 :(得分:1)
您需要在正则表达式中包含文字括号,该括号可以可选地存在,并且由于它们具有特殊含义,因此您需要在正则表达式中对其进行转义。
看到您的最后一个手机号码09876543210
,如果没有国家/地区代码,则似乎可以选择在数字前加零,因此您可以在国家/地区代码部分中使用零。
最后,就像您不想只支持全零的数字一样,您可以在正则表达式中(?!0+$)
前面有一个否定的外观。更新后的正则表达式将变为
^(?!0+$)(?:\(?\+\d{1,3}\)?[- ]?|0)?\d{10}$
此外,如果您不想支持仅使用相同数字的数字,例如2222222222
或5555555555
,则您的否定前瞻需要写成(?!(\d)\1+$)
,而正则表达式将成为
^(?!(\d)\1+$)(?:\(?\+\d{1,3}\)?[- ]?|0)?\d{10}$
验证手机号码的另一种方法是,替换所有不是数字的内容,并去除号码中所有前导零,然后剩下的将是纯手机号码,您可以进一步验证该号码。但是那里可能有某些缺点,因为可能很难弄清楚国家代码以及该数字是否确实有效。因为某些数字可能少于十位数,并且实际上可能是无效的,但是如果它们属于像新加坡这样的国家(我猜有八位数字),则它们可能是有效的。同样,如果您所在国家/地区的本地号码有11位数字,那么您可能会遇到麻烦。
答案 2 :(得分:1)
您可以尝试一下。
^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$
这对我有用。