Проверьте строку на все строчные буквы в PowerShell

Я хочу смочь протестировать, если строка PowerShell является всеми строчными буквами.

Я не миры лучшая regex обезьяна, но я пробовал вдоль этих строк:

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

Но конечно они не работают, и поиск Интернета не имеет меня нигде. Существует ли способ сделать это (помимо тестирования каждого символа в цикле)?

5
задан Peter Mortensen 19 June 2018 в 19:55
поделиться

3 ответа

PowerShell по умолчанию по умолчанию совпадает, поэтому вам нужно использовать оператор -CMatch :

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

-CMatch всегда склонность, в то время как -Imatch всегда нечувствительна к регистру.

Сбочная Примечание. Ваше регулярное выражение также было немного странно. В основном вы хотите, чтобы тот, который был здесь, который состоит из

  • анкера для запуска строки ( ^ )
  • класс класс символов Нижние латинские буквы ( [AZ] )
  • A Quantifier , показывая, что позволяет повторить класс символов, по крайней мере, 0 раза, тем самым сопоставив столько символов, сколько необходимо ([ * ). Вы можете использовать + вместо этого, чтобы запретить пустую строку.
  • Якорь для конца строки ( $ ). Два анкера убедитесь, что регулярное выражение должно совпадать каждый символ в строке. Если вы просто используете [A-Z] * , то это будет соответствовать любой строке, которая имеет строку по меньшей мере [ 0 в строчных буквах в нем . Что будет каждая строка.

PS: AHMAD имеет точку зрения, хотя, если ваша строка может состоять из других вещей, чем писем, и вы хотите убедиться, что каждый буква в нем является строчным, а не также требует То, что строка состоит исключительно из букв, то вам нужно инвертировать класс символов, вроде:

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

^ в начале класса символов инверты класс, сопоставление каждого персонаж не включен . Таким образом, это регулярное выражение будет не удастся только в том случае, если строка будет где-то заглавными буквами. Тем не менее, все еще необходим -Cmatch .

10
ответ дан 18 December 2019 в 09:07
поделиться

Попробуйте этот шаблон, который совпадает с тем, что является не заглавной буквы: «^ [^ az] * $"

Это вернет False для любые заглавные буквы, позволяющие строку содержать другие элементы, пока все буквы строчные. Например, «Hello World 123» будет действительным.

Если вы строго хотите письма без пробелов, цифр и т. Д., Тогда решение Йоханнеса подходит.

0
ответ дан 18 December 2019 в 09:07
поделиться

Если ваш тест такой прост, вы можете и, вероятно, следует избегать использования регулярных выражений:

$mystring -ceq $mystring.ToLower()
8
ответ дан 18 December 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: