2016-07-25 67 views
1

我正在尋找有12或13位數字的電話號碼。PowerShell正則表達式和e.164電話號碼

以下兩個正則表達式的工作:

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 

我應該如何使用|或?

+0

在圖案的開始處添加'(?x)'或刪除管道周圍的空間。然後將模式與另一組的錨定在一起。或者使用'^(\ + [3] [9])?([0-9] \ d {9,10} $' –

+0

可以舉個例子嗎?去除管道周圍的空間並沒有改變任何東西。謝謝! – PdeRover

+1

你有一個匹配這個模式的字符串:'39是可選的開始,然後10或11位數?然後你可以使用'^(\ + 39)?[0-9] {10,11} $'。你不需要交替操作符'|'然後 –

回答

1

你的管道周圍有空白,而且空白很重要。爲了使一些空格(如這樣,例如)成爲一個「格式化的空格」,將內嵌修飾符添加到模式的開頭。

此外,您應該小心未轉義的括號,他們創建組並且必須配對。

你的固定圖案可能看起來像

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

瞭解如何被創建的組:外括號創建一個組,以便^$可以適用於這兩種選擇分支,內那些被用來形成一個可選組(與他們之後的?量詞)。

如果你有一個字符串匹配該模式:在開始

  • 10或11位數字高達字符串的結尾
  • 使用

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

    +0

    我肯定會去'{10,11}',+1 –

    +0

    當然,回溯是最小的,但我沒有詳細討論,但是我應該注意,在.NET正則表達式中,'\ d'不等於'[0-9]',其中'\ d'匹配所有的Unicode數字,因此,要匹配從0到9的數字,需要使用更安全的字符類'[0-9]'。 –