Powershell -match in function - gets extra true/false when returned

hashtable, powershell, regex

Solution

The line `$keyword -match $pattern` returns `$True` if the pattern matches, `$False` otherwise. Since you don't do anything else with the value it is output from the function.

Try:

Function GetZipCodeFromKeyword([String] $keyword)
{
   $pattern = "\d{5}"
   $returnZipcode = "ERROR" 
   if ($keyword -match $pattern)
      {
         $returnZipcode = $Matches[0] 
      }

   Write-Host "`$returnZipcode=$returnZipcode"
   return $returnZipcode 
}

Any value output from the function becomes part of the result whether you explictly write it with `Write-Output` or return it with `return`, or just implicitly have a pipeline that outputs a result.

If you don't want a pipeline output to output from the function assign it to a variable. e.g.

$m = $keyword -match $pattern

or redirect it:

$keyword -match $pattern >$null

or:

$keyword -match $pattern | Out-Null

or send it to another output stream:

Write-Verbose ($keyword -match $pattern)

which leaves you scope to make it visible by setting `$VerbosePreference='Continue'` (or make your function into a cmdlet and use the `-Verbose` flag when calling it). Though in this last case I would still assign it to a variable first:

$m = $keyword -match $pattern
Write-Verbose "GetZipCodeFromKeyword RegEx match: $m" 

Problem

Why do I get the extract "True" or "False" (when all I want to get back is just the zip code) on the result of this function: ``` Function GetZipCodeFromKeyword([String] $keyword) { $pattern = "\d{5}" $keyword -match $pattern $returnZipcode = "ERROR" #Write-Host "GetZipCodeFromKeyword RegEx `$Matches.Count=$($Matches.Count)" if ($Matches.Count -gt 0) { $returnZipcode = $Matches[0] } Write-Host "`$returnZipcode=$returnZipcode" return $returnZipcode } cls $testKeyword = "Somewhere in 77562 Texas " $zipcode = GetZipCodeFromKeyword $testKeyword Write-Host "Zip='$zipcode' from keyword=$testKeyword" Write-Host " " $testKeyword = "Somewhere in Dallas Texas " $zipcode = GetZipCodeFromKeyword $testKeyword Write-Host "Zip='$zipcode' from keyword=$testKeyword" ``` Results of run time: ``` $returnZipcode=77562 Zip='True 77562' from keyword=Somewhere in 77562 Texas $returnZipcode=12345 Zip='False 12345' from keyword=Somewhere in Dallas Texas ```

Original source

Related problems