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

fal*_*lic 5 regex powershell case

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

我不是世界上最好的正则表达式猴子,但我一直在尝试这些方法:

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

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

Joe*_*oey 10

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

if ($mystring -cmatch "^[a-z]*$") { ... }
Run Code Online (Sandbox Code Playgroud)

-cmatch始终大小写敏感的,而-imatch始终不区分大小写.

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

  • 字符串开头的锚点(^)
  • 一个字符类的小写拉丁字母([a-z])
  • 一个量词,告诉重复字符类至少0次,从而根据需要匹配多个字符(*).您可以+改为禁用空字符串.
  • 字符串结尾的锚点($).这两个锚点确保正则表达式必须匹配字符串中的每个字符.如果你只是用[a-z]*那么这将匹配至少有一串任何字符串0小写字母的地方在里面.这将是每个字符串.

PS:Ahmad有一点,如果你的字符串可能包含其他东西而不是字母,并且你想确保其中的每个字母都是小写的,而不是要求字符串仅由字母组成,那么你必须反转字符类,有点:

if ($mystring -cmatch "^[^A-Z]*$") { ... }
Run Code Online (Sandbox Code Playgroud)

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


gui*_*ooo 8

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

$mystring -ceq $mystring.ToLower()
Run Code Online (Sandbox Code Playgroud)