检查PowerShell中所有小写字母的字符串

时间:2010-01-20 01:33:44

标签: regex powershell case

我希望能够测试PowerShell字符串是否都是小写字母。

我不是世界上最好的正则表达式猴子,但我一直在努力:

if ($mystring -match "[a-z]^[A-Z]") {
    echo "its lower!"
}

但当然它们不起作用,搜索互联网并没有把我带到任何地方。有没有办法做到这一点(除了测试循环中的每个字符)?

3 个答案:

答案 0 :(得分:10)

PowerShell默认情况下不区分大小写,因此您需要使用-cmatch运算符:

if ($mystring -cmatch "^[a-z]*$") { ... }

-cmatch 总是区分大小写,而-imatch始终不区分大小写。

旁注:你的正则表达式也有点奇怪。基本上你想要我在这里提供的那个由

组成的那个
  • 字符串开头的anchor^
  • character class小写拉丁字母([a-z]
  • A quantifier,告诉重复字符类至少0次,从而根据需要匹配尽可能多的字符(*)。您可以使用+代替禁止空字符串。
  • 字符串结尾的anchor$)。这两个锚点确保正则表达式必须匹配字符串中的每个字符。如果你只是使用[a-z]*,那么这将匹配任何字符串,其中包含至少0个小写字母某处的字符串。这将是每个字符串。
PS:Ahmad有一点,如果你的字符串可能包含其他东西而不是字母,你想确保其中的每个字母都是小写的,而不是要求字符串仅由字母组成,那么你必须反转字符类,如下:

if ($mystring -cmatch "^[^A-Z]*$") { ... }

字符类开头的^反转类,匹配包含的每个字符 。因此,如果字符串在某处包含大写字母,则此正则表达式将失败。但仍然需要-cmatch

答案 1 :(得分:7)

如果您的测试非常简单,您可以并且可能应该避免使用正则表达式:

$mystring -ceq $mystring.ToLower()

答案 2 :(得分:0)

尝试此模式,该模式匹配任何大写字母的内容:"^[^A-Z]*$"

对于任何大写字母,这将返回false,同时允许字符串包含其他项目,只要所有字母都是小写。例如,“hello world 123”将是有效的。

如果您严格要求没有空格,数字等的字母,那么Johannes的解决方案就适合。