PowerShell by default matches case-insensitively, so you need to use the -cmatch
operator:
if ($mystring -cmatch "^[a-z]*$") { ... }
-cmatch
is always case-sensitive, while -imatch
is always case-insensitive.
Side note: Your regular expression was also a little weird. Basically you want the one I provided here which consists of
- The anchor for the start of the string (
^
)
- A character class of lower-case Latin letters (
[a-z]
)
- A quantifier, telling to repeat the character class at least 0 times, thereby matching as many characters as needed (
*
). You can use +
instead to disallow an empty string.
- The anchor for the end of the string (
$
). The two anchors make sure that the regular expression has to match every character in the string. If you'd just use [a-z]*
then this would match any string that has a string of at least 0
lower-case letters somewhere in it. Which would be every string.
P.S.: Ahmad has a point, though, that if your string might consist of other things than letters too and you want to make sure that every letter in it is lower-case, instead of also requiring that the string consists solely of letters, then you have to invert the character class, sort of:
if ($mystring -cmatch "^[^A-Z]*$") { ... }
The ^
at the start of the character class inverts the class, matching every character not included. Thereby this regular expression would only fail if the string contains upper-case letters somewhere. Still, the -cmatch
is still needed.