PowerShell по умолчанию соответствует регистронезависимому, поэтому вам нужно использовать оператор -cmatch
:
if ($mystring -cmatch "^[a-z]*$") { ... }
-cmatch
равен всегда с учетом регистра, а -imatch
всегда учитывает регистр.
Примечание: Ваше регулярное выражение также было немного странным.В основном вам нужен тот, который я здесь предоставил, который состоит из
- Якорь для начала строки (
^
) - A класс символов строчных латинских букв (
[a-z]
) - A квантификатор , сообщающийПовторите класс символов по крайней мере 0 раз, тем самым сопоставляя столько символов, сколько необходимо (
*
).Вместо этого вы можете использовать +
, чтобы запретить пустую строку. - Якорь для конца строки (
$
).Два якоря гарантируют, что регулярное выражение должно соответствовать каждому символу в строке.Если вы просто используете [a-z]*
, то это будет соответствовать любой строке, в которой есть строка из не менее 0
строчных букв где-то .Это будет каждая строка.
PS: Ахмад имеет смысл, однако, что если ваша строка может состоять не только из букв, но и из других букв, и вы хотите убедиться, что каждая буква в нижнем регистре, вместо того, чтобы требовать, чтобы строка состояла только из букв, вы должны инвертировать класс символов, вроде:
if ($mystring -cmatch "^[^A-Z]*$") { ... }
^
в началекласс символов инвертирует класс, соответствующий каждому символу не в комплекте.Таким образом, это регулярное выражение завершится ошибкой, только если строка содержит где-то заглавные буквы.Тем не менее, -cmatch
все еще необходим.