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]
( )*
)。+
代わりに、空の文字列を禁止するために使用できます。$
( )。2つのアンカーは、正規表現が文字列内のすべての文字と一致する必要があることを確認します。使用するだけの場合[a-z]*
、これは、少なくとも0
小文字の文字列がどこかにあるすべての文字列と一致します。これはすべての文字列になります。PS:ただし、Ahmadは、文字列が文字以外のもので構成されている可能性があり、文字列が文字のみで構成されていることを要求するのではなく、文字列内のすべての文字が小文字であることを確認したい場合は、文字クラスを反転する必要があります。次のようなものです。
if ($mystring -cmatch "^[^A-Z]*$") { ... }
文字クラスの^
先頭にあるは、含まれていないすべての文字に一致するようにクラスを反転します。そのため、この正規表現は、文字列のどこかに大文字が含まれている場合にのみ失敗します。それでも、はまだ必要です。-cmatch
テストが非常に単純な場合は、正規表現の使用を避けることができ、おそらく避けるべきです。
$mystring -ceq $mystring.ToLower()
このパターンを試してください。これは、大文字以外のものと一致します。"^[^A-Z]*$"
これは、すべての文字が小文字である限り、文字列に他の項目を含めることを許可しながら、大文字に対してfalseを返します。たとえば、「helloworld123」は有効です。
スペースや数字などのない文字が厳密に必要な場合は、Johannesのソリューションが適しています。