Consider the following snippet:
"12-18" -Contains "-"
You’d think this evaluates to true
, but it doesn't. This will evaluate to false
instead. I’m not sure why this happens, but it does.
To avoid this, you can use this instead:
"12-18".Contains("-")
Now the expression will evaluate to true.
Why does the first code snippet behave like that? is there something special about -
that doesn't play nicely with -Contains
? The documentation doesn't mention anything about it.
The -Contains
operator doesn't do substring comparisons and the match must be on a complete string and is used to search collections.
From the documentation you linked to:
-Contains Description: Containment operator. Tells whether a collection of reference values includes a single test value.
In the example you provided you're working with a collection containing just one string item.
If you read the documentation you linked to you'll see an example that demonstrates this behaviour:
Examples:
PS C:\> "abc", "def" -Contains "def"
True
PS C:\> "Windows", "PowerShell" -Contains "Shell"
False #Not an exact match
I think what you want is the -Match
operator:
"12-18" -Match "-"
Which returns True
.
Important: As pointed out in the comments and in the linked documentation, it should be noted that the -Match
operator uses regular expressions to perform text matching.