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