我希望能够测试 PowerShell 字符串是否都是小写字母。
我不是世界上最好的正则表达式猴子,但我一直在尝试这些方面:
if ($mystring -match "[a-z]^[A-Z]") {
echo "its lower!"
}
但是当然它们不起作用,并且搜索互联网并没有让我到任何地方。有没有办法做到这一点(除了测试循环中的每个字符)?
我希望能够测试 PowerShell 字符串是否都是小写字母。
我不是世界上最好的正则表达式猴子,但我一直在尝试这些方面:
if ($mystring -match "[a-z]^[A-Z]") {
echo "its lower!"
}
但是当然它们不起作用,并且搜索互联网并没有让我到任何地方。有没有办法做到这一点(除了测试循环中的每个字符)?
默认情况下,PowerShell 不区分大小写匹配,因此您需要使用-cmatch
运算符:
if ($mystring -cmatch "^[a-z]*$") { ... }
-cmatch
始终区分大小写,而始终-imatch
不区分大小写。
旁注:你的正则表达式也有点奇怪。基本上你想要我在这里提供的一个,它包括
^
)[a-z]
*
)。您可以+
改为使用来禁止空字符串。$
)。这两个锚确保正则表达式必须匹配字符串中的每个字符。如果您只是使用,那么这将匹配任何在其中某处[a-z]*
至少包含0
小写字母的字符串的字符串。这将是每个字符串。PS:不过,Ahmad 有一点,如果您的字符串也可能包含字母以外的其他内容,并且您想确保其中的每个字母都是小写的,而不是还要求字符串仅由字母组成,那么你必须反转字符类,有点:
if ($mystring -cmatch "^[^A-Z]*$") { ... }
^
字符类开头的反转类,匹配未包含的每个字符。因此,只有当字符串在某处包含大写字母时,此正则表达式才会失败。尽管如此,-cmatch
仍然需要。
如果您的测试如此简单,您可以并且可能应该避免使用正则表达式:
$mystring -ceq $mystring.ToLower()
试试这个模式,它匹配任何不是大写字母的东西:"^[^A-Z]*$"
这将对任何大写字母返回 false,同时允许字符串包含其他项目,只要所有字母都是小写。例如,“hello world 123”将是有效的。
如果您严格要求没有空格、数字等的字母,那么 Johannes 的解决方案适合。