Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 意大利电话10位数正则表达式发行_Regex - Fatal编程技术网

Regex 意大利电话10位数正则表达式发行

Regex 意大利电话10位数正则表达式发行,regex,Regex,我正试图使用来自的正则表达式 对于意大利移动电话号码,但简单的号码如3491234567无效 (不在乎空间,我会修剪它们) 两个都通过了验证,怎么了 更新: 澄清: 正则表达式应该匹配以任意一个开头的任何数字 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

我正试图使用来自的正则表达式

对于意大利移动电话号码,但简单的号码如3491234567无效

(不在乎空间,我会修剪它们)

两个都通过了验证,怎么了

更新:

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

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)?

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

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

您的测试用例无法覆盖正则表达式捕获的许多变体;也许您需要增强测试集,以确保它符合您的要求

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

更新了@Edoardo回答中的信息;包装清晰,并添加注释:

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

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

我发现了这个,并用新的运算符和MVNO前缀(Iliad,ho.)进行了更新


我改进了regex,添加了case来处理数字之间的空格:

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

不带特殊字符的移动意大利号码的简单正则表达式为:

/^3[0-9]{8,9}$/

它匹配以数字“3”开头,后跟8或9位的字符串,例如:

3345678103

然后可以添加意大利语前缀,如“+39”或“0039”

/^+393[0-9]{8,9}$/-匹配-->+393345678103


/^\0039 3[0-9]{8,9}$/--match-->0039 3345678103

我建议当您看到一个内部有管道的正则表达式时要非常小心。就正则表达式而言,这个站点是不可信的。如何使用正则表达式?请发布代码。@WiktorStribiżew为什么要小心使用管道的正则表达式?因为这很可能是人为错误。我指的是角色类中的管道,而不是模式中的管道。顺便问一下,这里的
{3-9}
是什么意思?它字面上与
{3-9}
匹配。意大利电话号码中有这样的电话部分吗?如何拨打
{
[{8,9}| 0]
匹配1个符号:
{
8
,或
9
…意大利电话号码中有逗号吗?不要使用这个正则表达式,自己写一个,它是垃圾。我想你指的是
(36[6 | 8 | 0])
part,我没有注意到。不管怎样,我认为它是用来验证一个以
36
开头,以
6
8
0
结尾的数字。那部分正确吗?不,不,不。模式是垃圾。找到需求,从头开始编写正确的模式。我会的,谢谢。你的表达现在还不错,我会尽快进一步调查。谢谢!如果你能解释这意味着什么和/或链接到更多信息,我可能也会更新我的答案以保持最新。MVNO是什么?Iliad是谁?(显然是电话接线员?)MVNO是“虚拟运营商”,他们有自己的前缀。Iliad去年在意大利开始作为主要运营商,分配了351个前缀。还修复了34x系列,因为它只接受347-8-9-0,但我们有344和345个数字。PS:我想评论你的答案,而不是添加新的,但我没有足够的声誉。顺便说一句,谢谢你,这是最好的答案ound Before还更改了最终数字计数。仍在使用333 123456等旧数字。我会为前缀添加一个OR。类似这样的操作可能会实现
^((?:0039)?|(?:\+39)?)3[0-9]{8,9}$
^                           # 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
^(\((00|\+)39\)|(00|\+)39)?(38[890]|34[4-90]|36[680]|33[13-90]|32[89]|35[01]|37[019])\d{6,7}$
^(\((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})$