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