Я хочу смочь протестировать, если строка PowerShell является всеми строчными буквами.
Я не миры лучшая regex обезьяна, но я пробовал вдоль этих строк:
if ($mystring -match "[a-z]^[A-Z]") {
echo "its lower!"
}
Но конечно они не работают, и поиск Интернета не имеет меня нигде. Существует ли способ сделать это (помимо тестирования каждого символа в цикле)?
PowerShell по умолчанию по умолчанию совпадает, поэтому вам нужно использовать оператор -CMatch
:
if ($mystring -cmatch "^[a-z]*$") { ... }
-CMatch
всегда склонность, в то время как -Imatch
всегда нечувствительна к регистру.
Сбочная Примечание. Ваше регулярное выражение также было немного странно. В основном вы хотите, чтобы тот, который был здесь, который состоит из
^
) [AZ]
) *
). Вы можете использовать +
вместо этого, чтобы запретить пустую строку. $
). Два анкера убедитесь, что регулярное выражение должно совпадать каждый символ в строке. Если вы просто используете [A-Z] *
, то это будет соответствовать любой строке, которая имеет строку по меньшей мере [ 0
в строчных буквах в нем . Что будет каждая строка. PS: AHMAD имеет точку зрения, хотя, если ваша строка может состоять из других вещей, чем писем, и вы хотите убедиться, что каждый буква в нем является строчным, а не также требует То, что строка состоит исключительно из букв, то вам нужно инвертировать класс символов, вроде:
if ($mystring -cmatch "^[^A-Z]*$") { ... }
^
в начале класса символов инверты класс, сопоставление каждого персонаж не включен . Таким образом, это регулярное выражение будет не удастся только в том случае, если строка будет где-то заглавными буквами. Тем не менее, все еще необходим -Cmatch
.
Попробуйте этот шаблон, который совпадает с тем, что является не заглавной буквы: «^ [^ az] * $"
Это вернет False для любые заглавные буквы, позволяющие строку содержать другие элементы, пока все буквы строчные. Например, «Hello World 123» будет действительным.
Если вы строго хотите письма без пробелов, цифр и т. Д., Тогда решение Йоханнеса подходит.
Если ваш тест такой прост, вы можете и, вероятно, следует избегать использования регулярных выражений:
$mystring -ceq $mystring.ToLower()