意大利电话10位数的号码regex问题

3okqufwl  于 2023-03-24  发布在  其他
关注(0)|答案(4)|浏览(144)

我正在尝试使用这个网站的正则表达式

/^([+]39)?((38[{8,9}|0])|(34[{7-9}|0])|(36[6|8|0])|(33[{3-9}|0])|(32[{8,9}]))([\d]{7})$/

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

  • (不关心空格,因为我会修剪它们)*
should pass:
349 1234567
+39 349 1234567
TODO: 0039 349 1234567
TODO: (+39) 349 1234567
TODO: (0039) 349 1234567

regex101regexr都通过了验证..怎么了?

更新日期:

需要说明的是:正则表达式应该匹配任何以
388/389/380 (38[{8,9}|0])|
或347/348/349/340 (34[{7-9}|0])|
或366/368/360 x 1米2英寸1 x
或333/334/335/336/337/338/339/330 x一米三英寸
328/329 (32[{8,9}])
加7位数([\d]{7})
和+39在开始可选([+]39)?

r8uurelv

r8uurelv1#

下面的正则表达式似乎可以满足您的要求。我去掉了语法错误并进行了一些猜测,并添加了缺失的部分以覆盖您的TODO注解。

^(\((00|\+)39\)|(00|\+)39)?(38[890]|34[7-90]|36[680]|33[3-90]|32[89])\d{7}$

演示:https://regex101.com/r/yF7bZ0/1
您的测试用例无法覆盖正则表达式捕获的许多变化;也许你会想增强测试集,以确保它做你想要的。
开头允许有一个可选的带括号或不带括号的国际前缀。基本模式是(00|\+)39,它可以在前后带括号或不带括号的情况下重复。(也许一个更好的整体方法是在处理开始之前修剪括号和标点符号以及空格;当然,您会希望将加号保持为显著。)
根据@Edoardo的回答更新信息; Package 以便于阅读并添加注解:

^                           # 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

有一些明显的偶然差距可能也会随着时间的推移而被填补。进一步概括这一点可能会提高对未来变化的适应能力,但当然同时可能会增加误报的风险。决定哪一个更糟糕。

h79rfbju

h79rfbju2#

我发现了这个,我更新了新的运营商和MVNO前缀(伊利亚特,ho。)

^(\((00|\+)39\)|(00|\+)39)?(38[890]|34[24-90]|36[680]|33[13-90]|32[890]|35[013]|37[0139]|39[23])\d{6,7}$
s6fujrry

s6fujrry3#

我改进了正则表达式,添加了大小写来处理数字之间的空格:

^(\((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

c3frrgcw

c3frrgcw4#

以下文件:
https://it.qaz.wiki/wiki/Telephone_numbers_in_Italy
一个不带特殊字符移动的意大利数字的简单正则表达式是:
/^3[0-9]{8,9}$/
它匹配一个以数字“3”开头,后跟8或9个数字的字符串,例如:
3345678103
您可以添加意大利语前缀,如'+39 '或'0039 '
/^+39 3[0-9]{8,9}$/ --- match --〉+39 3345678103
电话:0393 - 3345678103传真:0393 - 3345678103

相关问题