RosettaCodeData/Task/Strip-control-codes-and-extended-characters-from-a-string/PowerShell/strip-control-codes-and-extended-characters-from-a-string-1.psh
2017-09-25 22:28:19 +02:00

47 lines
1.2 KiB
Text

function Remove-Character
{
[CmdletBinding(DefaultParameterSetName="Control and Extended")]
[OutputType([string])]
Param
(
[Parameter(Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
[string]
$String,
[Parameter(ParameterSetName="Control")]
[switch]
$Control,
[Parameter(ParameterSetName="Extended")]
[switch]
$Extended
)
Begin
{
filter Remove-ControlCharacter
{
$_.ToCharArray() | ForEach-Object -Begin {$out = ""} -Process {if (-not [Char]::IsControl($_)) {$out += $_ }} -End {$out}
}
filter Remove-ExtendedCharacter
{
$_.ToCharArray() | ForEach-Object -Begin {$out = ""} -Process {if ([int]$_ -lt 127) {$out += $_ }} -End {$out}
}
}
Process
{
foreach ($s in $String)
{
switch ($PSCmdlet.ParameterSetName)
{
"Control" {$s | Remove-ControlCharacter}
"Extended" {$s | Remove-ExtendedCharacter}
Default {$s | Remove-ExtendedCharacter | Remove-ControlCharacter}
}
}
}
}