Updated Code: I did incorporate the suggestion by krzydoug to the end to see how his code ran compared to mine
$phone = Read-Host "Enter Phone Number"
$fmtPhone = ""
Switch -Regex ($phone) {
'^\+(\d{11})' {
Write-Host "Match 1"
$fmtPhone = $phone -replace '^\+(\d)(\d{3})(\d{3})(\d{4})', '+$1 ($2) $3-$4'
}
'^\+(\d)(\d{3})(\d{3})(\d{4});ext=(\d+)' {
Write-Host "Match 2"
$fmtPhone = $phone -replace '^\+(\d)(\d{3})(\d{3})(\d{4});ext=(\d+)', '+$1 ($2) $3-$4 x$5'
}
'^(\d)(\d{3})(\d{3})(\d{4});ext=(\d+)' {
Write-Host "Match 3"
$fmtPhone = $phone -replace '^(\d)(\d{3})(\d{3})(\d{4});ext=(\d+)', '+$1 ($2) $3-$4 x$5'
}
'^\+(\d) (\d{3})-(\d{3})-(\d{4}) x(\d{4})' {
Write-Host "Match 4"
$fmtPhone = $phone -replace '^\+(\d) (\d{3})-(\d{3})-(\d{4}) x(\d{4})', '+$1 ($2) $3-$4 x$5'
}
'^\((\d{3})\) (\d{3})-(\d{4}) x(\d{4})' {
Write-Host "Match 5"
$fmtPhone = $phone -replace '^(\d{3}) (\d{3})-(\d{4}) x(\d{4})', '+$1 ($2) $3-$4 x$5'
}
'^\+(\d) (\d{3}) (\d{3})-(\d{4}) x(\d{4})' {
Write-Host "Match 6"
$fmtPhone = $phone -replace '^\+(\d) (\d{3}) (\d{3})-(\d{4}) x(\d{4})', '+$1 ($2) $3-$4 x$5'
}
default {
Write-Host "No Match"
}
}
Write-Host "Formatted Number: " $fmtPhone
$pattern = '^\+?(?<Country>\d)\s?(?<Area>\d{3})(\s|-)?(?<Prefix>\d{3})(\s|-)?(?<Suffix>\d{4})(.*?(?<Extension>\d{3,4}))?'
Write-Host "Regex Number: "
if($phone -match $pattern){
if($matches.Extension){
"+$($Matches.Country) ($($matches.Area)) $($Matches.Prefix)-$($Matches.Suffix) x$($Matches.Extension)"
}
else{
"+$($Matches.Country) ($($matches.Area)) $($Matches.Prefix)-$($Matches.Suffix)"
}
}
Here is a sampling of different telephone number formats that I found and ran each one
(123) 456-7890 x1234
+1 (123) 456-7890
+1 (123) 456-7890 x1234
+1 (123) 456-7890 x.1234
+1 123 456 7890 x1234
+1 123-456-7890 x1234
+1 123 456 7890
+11234567890
+11234567890;ext=1234
11234567890;ext=1234
123456790
123-456-7890
tel:+1123456790;ext=1234
+ +1 (123) 4567890 x.1234
+1 +11234567890
11234567890
Enter Phone Number: (123) 456-7890 x1234
Match 5
Formatted Number: (123) 456-7890 x1234
Regex Number:
Enter Phone Number: +1 (123) 456-7890
No Match
Formatted Number:
Regex Number:
Enter Phone Number: +1 (123) 456-7890 x1234
No Match
Formatted Number:
Regex Number:
Enter Phone Number: +1 (123) 456-7890 x.1234
No Match
Formatted Number:
Regex Number:
Enter Phone Number: +1 123 456 7890 x1234
No Match
Formatted Number:
Regex Number:
+1 (123) 456-7890 x1234
Enter Phone Number: +1 123-456-7890 x1234
Match 4
Formatted Number: +1 (123) 456-7890 x1234
Regex Number:
+1 (123) 456-7890 x1234
Enter Phone Number: +1 123 456 7890
No Match
Formatted Number:
Regex Number:
+1 (123) 456-7890
Enter Phone Number: +11234567890
Match 1
Formatted Number: +1 (123) 456-7890
Regex Number:
+1 (123) 456-7890
Enter Phone Number: +11234567890;ext=1234
Match 1
Match 2
Formatted Number: +1 (123) 456-7890 x1234
Regex Number:
+1 (123) 456-7890 x1234
Enter Phone Number: 11234567890;ext=1234
Match 3
Formatted Number: +1 (123) 456-7890 x1234
Regex Number:
+1 (123) 456-7890 x1234
Enter Phone Number: 123456790
No Match
Formatted Number:
Regex Number:
Enter Phone Number: 123-456-7890
No Match
Formatted Number:
Regex Number:
Enter Phone Number: tel:+1123456790;ext=1234
No Match
Formatted Number:
Regex Number:
Enter Phone Number: + +1 (123) 4567890 x.1234
No Match
Formatted Number:
Regex Number:
Enter Phone Number: +1 +11234567890
No Match
Formatted Number:
Regex Number:
Enter Phone Number: 11234567890
No Match
Formatted Number:
Regex Number:
+1 (123) 456-7890