PowerShell正则表达式和e.164电话号码

时间:2016-07-25 17:29:26

标签: regex powershell

我正在寻找正好有12或13位数的电话号码。

以下两个正则表达式工作:

PS C:\Data\UMCP> $bla = [regex]'^(\+[3][9])?([0-9]\d{9})$'
PS C:\Data\UMCP> $twelv -match $bla
True
PS C:\Data\UMCP> $bla = [regex]'^(\+[3][9])?([0-9]\d{10})$'
PS C:\Data\UMCP> $thirt -match $bla
True

但是

PS C:\Data\UMCP> $bla = [regex]'^(\+[3][9])?([0-9]\d{9} | ^\+[3][9])?([0-9]\d{10})$'
PS C:\Data\UMCP> $thirt -match $bla
True
PS C:\Data\UMCP> $twelv -match $bla
False

我应该如何使用|或?

1 个答案:

答案 0 :(得分:1)

你在管道周围有空格,这个空白很重要。要制作一些空格(例如,像这样的“格式化空格”),请将(?x) IgnorePatternWhitespace内联修饰符添加到模式的开头。

另外,你应该小心使用未转义的括号,他们组成小组并且必须配对。

您的固定模式可能看起来像

'^(?:(?:\+[3][9])?[0-9]\d{9}|(?:\+[3][9])?[0-9]\d{10})$'
  |   |--OPT.GR.-|          | |-OPT.GR.--|           |
  |---------- BRANCH 1------|-------- BRANCH 2-------|

查看组的创建方式:外部括号创建一个组,以便^$可以应用于两个备用分支,内部括号用于形成一个可选组(使用他们之后的?量词。)

如果您有匹配此模式的字符串:

  • 一个可选的+39开头
  • 直到字符串结尾的10或11位数字

使用

^(?:\+39)?[0-9]{10,11}$

请参阅regex demo