【问题标题】:Internationalized Phonenumber regex国际化电话号码正则表达式
【发布时间】:2019-05-30 17:51:30
【问题描述】:

我编写了以下正则表达式来确定国内或国际电话号码是否具有正确的模式。

/^(00|0|[+])([-][0-9]|[0-9]){1,13}[0-9]/

可以通过将数字拆分为国家代码和电话号码来改进模式,但这并不重要。

感谢您的帮助

编辑:这是代码。这应该不是问题,因为其他正则表达式运行良好。 oChanged 是一个文本输入。

    function verification(oChanged, regex){
   var val = $(oChanged).val();
   var reg = new RegExp(regex);
   if( !reg.test(val) ){
       if( !$(oChanged).hasClass('notvalid') ){
            $(oChanged).addClass('notvalid');
       }

   }else{
       if( $(oChanged).hasClass('notvalid') ){
            $(oChanged).removeClass('notvalid');
       }
   }
}

我用互联网上的一些正则表达式测试器对其进行了测试,它匹配了所有这些字符串,但是当我实现它时它不匹配。

它应该适用于例如004915773554660 +4915773554660 015773554660 0049157-7355-466-0

【问题讨论】:

  • 在这里发布你的实现。
  • 显示不起作用的代码 - 仅使用正则表达式可能还不够。还可以考虑使用像 libphonenumber 这样的专用库而不是正则表达式
  • [+] 中似乎[ ] 是多余的。它以 +ccAnnnnnnnn 格式的国际格式号码失败,其中 cc 是 2 位国家代码,A 是区号,n 是 8 位固定电话或手机号码。 “国家”是如何确定的?
  • @kristaps 该代码适用于其他正则表达式(希望它是正确的复数形式)。
  • 而@RobG national 我们会是没有国家代码的数字,例如:015773554660 或 030333555。你说得对,我也认为括号会是 Reundand,但没有它们我会变成“意外的量词”错误信息。我认为这是与^() 的组合。也许我应该附加:我总是在 Internet Explorer 中测试这些东西。我的意思是……

标签: javascript regex


【解决方案1】:

请使用这个:

/(+\d{1,3}\s?)?(((\d{3})\s?)|(\d{3})(\s|-?))(\d {3}(\s|-?))(\d{4})(\s?(([E|e]xt[:|.|]?)|x|X)(\s?\d+) )?/g

演示:https://www.regextester.com/103299

完整号码

+999 (999) 999-9999 分机。 99999

普通本地电话号码 (XXX) XXX-XXXX

1231231231 123-1231231 123123-1231 123-123 1231 123 123-1231 123-123-1231 (123)123-1231 (123)123 1231 (123) 123-1231 (123) 123 1231

国际代码 +XXX (XXX) XXX-XXXX

+99 1234567890 +991234567890

分机号 (XXX) XXX-XXXX 分机号。 XXX...

1234567890 分机 1123123 1234567890分机1123123 1234567890分机1123123 1234567890分机1123123

【讨论】:

  • 谢谢。我会测试它。但我仍然想知道为什么我自己的正则表达式不起作用。根据我对 Pattern 的理解,它应该是正确的,它让我发疯,不知道为什么它不起作用。
  • 我住的地方,没有人像 +999 (999) 999-9999 这样格式化他们的电话号码。国际范围内的本地号码是 +99 9 9999 9999,国内号码是 09 9999 9999。“+”表示国际接入代码,通常为“00”或“001”,国家代码可以是 1、2或 3 位数字(美国 1、英国 44、阿尔巴尼亚 355),区号也可能是 1、2 或 3 位数字。我严重怀疑一个正则表达式可以以任何严格的方式完成所有工作。
  • 很抱歉,但您的正则表达式也不适合我。 Error: unexpected quantifier。当我像\+ 一样逃避它时,它也会显示错误。当我尝试[\+] 时,它不会,但每个“有效”数字(如 +4915773554660 或 004915773554660 或 015773554660)都不匹配。
猜你喜欢
  • 2022-07-22
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多