手机号码的正则表达式,带有某些条件的电话号码验证

Posted

技术标签:

【中文标题】手机号码的正则表达式,带有某些条件的电话号码验证【英文标题】:Regex for mobile number, phone number validation with some conditions 【发布时间】:2021-05-22 08:18:43 【问题描述】:

我想在正则表达式中验证手机号码和电话号码。所以正则表达式应该通过以下所有规则

    必须至少有 5 个数字。

    特殊字符如+、()、-、#只能使用一次

    左括号和右括号应该相互存在,即如果使用左括号,则必须强制关闭

    最大数量应为 20。

为了做到这一点,我添加了这段代码。

//validate phone
function validatePhone( phone ) 
    var regex = /^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d1,\)?[\-\.\ \\\/]?)0,)(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$/i;
    return regex.test( phone );

但它并没有验证所有条件。

更新 它应该接受所有这些电话号码

(+355)250235
+91 123456789012
(+355) 250-236-236-789
(+355) 2502-3656-1236-8789
+920123456789012345987
(+355) 250235 #10

【问题讨论】:

仅供参考,Google 有一个 非常 全面的跨国电话号码验证库,您可以使用它:github.com/google/libphonenumber/tree/master/javascript/i18n/… @RoryMcCrossan 感谢您提供的网址,但我们不能使用正则表达式来做到这一点吗? 你能用一些例子更新这个问题吗? @Jobelle 我已经更新了我的问题。请检查。 @NewUser 可能像这样^(?=(?:[^\n\d]*\d)5)(?!(?:[^\n\d]*\d)21)(?:\(\+\d+\)|\+\d+) ?\d+(?:-\d+)*$ regex101.com/r/EfsEqq/1 注意这个例子+920123456789012345987 有21 个数字。 【参考方案1】:

您可以断言至少 5 位而不是 21 位。

然后匹配带括号或不带括号的部分,并可选择匹配末尾带有# 的部分。

^(?=(?:[^\n\d]*\d)5)(?!(?:[^\n\d]*\d)21)(?:\(\+?\d+\)|\+?\d+) ?\d+(?:-\d+)*(?: ?#\d+)?$

Regex demo

【讨论】:

【参考方案2】:

首先,使用下面的删除空格和 - (连字符)

 var temp =str.replace(/([\s\-])/g, ''); 

然后使用下面的 reg ex 测试它

^((\()1(\+?\d3(\))1)|(\+)?\d3)(\d)2,17$

试试下面的函数

function validate (str)

 var temp =str.replace(/([\s\-])/g, '');  
  var patt = /^((\()1(\+?\d3(\))1)|(\+)?\d3)(\d)2,17$/g;
  var result = patt.test(temp);

Check This

【讨论】:

我们不能从开头删除 + 吗?在数字开头使用 + 不应该是强制性的。 @NewUser Ans 已更新。 w3schools.com/code/tryit.asp?filename=GODLQO42ZG7G

以上是关于手机号码的正则表达式,带有某些条件的电话号码验证的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 使用正则表达式验证电话号码

js常用的正则表达式

如何使用带有 Ajv 的正则表达式验证字符串?

求一个正则表达式,既验证固定电话也验证手机号码!

手机号码正则表达式验证

JS正则验证手机号码