首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >意大利电话10位号码regex发行

意大利电话10位号码regex发行
EN

Stack Overflow用户
提问于 2016-03-04 11:19:28
回答 4查看 11K关注 0票数 7

我正在尝试使用本站的正则表达式

代码语言:javascript
运行
复制
/^([+]39)?((38[{8,9}|0])|(34[{7-9}|0])|(36[6|8|0])|(33[{3-9}|0])|(32[{8,9}]))([\d]{7})$/

对于,意大利移动电话号码,但是一个简单的号码,如3491234567,结果无效。

(不要在意空间,因为我会修剪它们)

代码语言:javascript
运行
复制
should pass:
349 1234567
+39 349 1234567
TODO: 0039 349 1234567
TODO: (+39) 349 1234567
TODO: (0039) 349 1234567

regex101雷杰斯都通过了验证.怎么了?

更新:

为了澄清:正则表达式应该匹配任何以任一数字开头的数字。

388/389/380 (38[{8,9}|0])|

或347/348/349/340 (34[{7-9}|0])|

或366/368/360 (36[6|8|0])|

或333/334/335/336/337/338/339/330 (33[{3-9}|0])|

328/329 (32[{8,9}])

加7位([\d]{7})

开始时的+39 (可选的([+]39)? )

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-03-04 11:46:05

下面的正则表达式似乎满足了您的要求。我取出语法错误,并猜测了一点,并添加了缺失的部分,以涵盖您的TODO注释。

代码语言:javascript
运行
复制
^(\((00|\+)39\)|(00|\+)39)?(38[890]|34[7-90]|36[680]|33[3-90]|32[89])\d{7}$

演示:https://regex101.com/r/yF7bZ0/1

您的测试用例未能涵盖regex捕获的许多变体;也许您希望增强测试集,以确保它能满足您的需要。

开头允许使用带括号或不带括号的可选国际前缀。基本模式是(00|\+)39,它被重复使用或不带括号。(一种更好的总体方法可能是在开始处理之前修剪括号和标点符号以及空格;当然,您希望保持加号的重要性。)

使用@Edoardo答复中的信息进行更新;包装以便于阅读并添加评论:

代码语言:javascript
运行
复制
^                           # beginning of line
(\((00|\+)39\)|(00|\+)39)?  # country code or trunk code, with or without parentheses
(                           # followed by one of the following
 32[89]|                    # 328 or 329
 33[013-9]|                 # 33x where x != 2
 34[04-9]|                  # 34x where x not in 1,2,3
 35[01]|                    # 350 or 351
 36[068]|                   # 360 or 366 or 368
 37[019]                    # 370 or 371 or 379
 38[089])                   # 380 or 388 or 389
\d{6,7}                     # ... followed by 6 or 7 digits
$                           # and end of line

有明显的意外缺口,这可能也会随着时间的推移得到填补。进一步推广这一点可能会提高对未来变化的应变能力,但同时也可能增加出现假阳性的风险。决定哪一个更糟。

票数 12
EN

Stack Overflow用户

发布于 2019-04-23 12:01:23

我发现了这一点,并更新了新的操作符和MVNO前缀(Iliad,ho)。

代码语言:javascript
运行
复制
^(\((00|\+)39\)|(00|\+)39)?(38[890]|34[4-90]|36[680]|33[13-90]|32[89]|35[01]|37[019])\d{6,7}$
票数 5
EN

Stack Overflow用户

发布于 2019-06-26 14:04:53

我改进了正则表达式,增加了处理数字之间空间的情况:

代码语言:javascript
运行
复制
^(\((00|\+)39\)|(00|\+)39)?(38[890]|34[4-90]|36[680]|33[13-90]|32[89]|35[01]|37[019])(\s?\d{3}\s?\d{3,4}|\d{6,7})$

因此,例如,我可以匹配电话号码如下(0039) 349 123 4567或这349 123 4567

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35794734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档