Out-PhoneticAlphabet.ps1
<#PSScriptInfo
.VERSION 0.1.0 .GUID 2d10c0a1-6a5a-4cc5-876e-afd3feebc9e9 .AUTHOR Cory Calahan .COMPANYNAME .COPYRIGHT (C) Cory Calahan. All rights reserved. .TAGS NATO,phonetic,alphabet .LICENSEURI .PROJECTURI https://github.com/stlth/Out-PhoneticAlphabet .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES .Synopsis Converts a string to a phonetic alphabet (NATO) pronunciation. .DESCRIPTION Converts a supplied string to output a phonetic alphabet (NATO) pronunciation as a new string. .EXAMPLE PS> Out-PhoneticAlphabet -InputObject 000OOOo11IIi #> function Out-PhoneticAlphabet { [CmdletBinding(SupportsShouldProcess=$true, ConfirmImpact='Low')] [Alias('Out-NATOAlphabet')] [OutputType([String])] Param ( # Input string to convert [Parameter(Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$false, ValueFromRemainingArguments=$false, Position=0)] [ValidateNotNull()] [ValidateNotNullOrEmpty()] [ValidatePattern("^[0-9a-zA-Z\.\-]+$")] [string[]] $InputObject ) Begin { Write-Verbose -Message 'Listing Parameters utilized:' $PSBoundParameters.GetEnumerator() | ForEach-Object { Write-Verbose -Message "$($PSItem)" } $nato = @{ '0'='(ZERO)' '1'='(ONE)' '2'='(TWO)' '3'='(THREE)' '4'='(FOUR)' '5'='(FIVE)' '6'='(SIX)' '7'='(SEVEN)' '8'='(EIGHT)' '9'='(NINE)' 'a'='alfa' 'b'='bravo' 'c'='charlie' 'd'='delta' 'e'='echo' 'f'='foxtrot' 'g'='golf' 'h'='hotel' 'i'='india' 'j'='juliett' 'k'='kilo' 'l'='lima' 'm'='mike' 'n'='november' 'o'='oscar' 'p'='papa' 'q'='quebec' 'r'='romeo' 's'='sierra' 't'='tango' 'u'='uniform' 'v'='victor' 'w'='whiskey' 'x'='xray' 'y'='yankee' 'z'='zulu' '.'='(POINT)' '-'='(DASH)' } } # END: BEGIN Process { if ($pscmdlet.ShouldProcess("Target", "Operation")) { foreach ($string in $InputObject) { Write-Verbose -Message "InputObject: '$string'" $sb = New-Object -TypeName 'System.Text.StringBuilder' $characters = $string.ToCharArray() $count = $($characters.Count) for ($i = 0; $i -lt $count; $i++) { $character = $characters[$i] switch -Regex -CaseSensitive ($character) { '\d' { $sb.Append($nato.Get_Item("$character")) | Out-Null break } '[a-z]' { $sb.Append($nato.Get_Item("$character").ToLower()) | Out-Null break } '[A-Z]' { $sb.Append($nato.Get_Item("$character").ToUpper()) | Out-Null break } '\.' { $sb.Append($nato.Get_Item("$character")) | Out-Null break } '\-' { $sb.Append($nato.Get_Item("$character")) | Out-Null break } Default {<# Nothing. #>} } # The string contains additional characters, append a whitespace ' ' to make the output text easier to read. if ($i -ne $($count-1)) { $sb.Append(' ') | Out-Null } } Write-Output -InputObject $($sb.ToString()) Remove-Variable -Name sb,characters,count } } } # END: PROCESS End { } # END: END } |