验证用户条目符合大小写混合的要求

时间:2017-03-29 13:29:18

标签: validation powershell user-input case-sensitive

我试图弄清楚如何测试混合大小写或将用户输入更改为混合大小写。

目前我的代码包括:

$Type = Read-Host 'Enter MY, OLD, NEWTest, Old_Tests'

但是,我需要验证用户输入的确切情况,如果他们没有将案例更改为正确的情况。我在这里和其他网站上已经回顾了很多不同的问题,但似乎没有人真正谈论以我能理解的方式验证混合案例。

  1. Validate User Entry
  2. Regex to match mixed case words
  3. Validating String User Entry
  4. How to check if a string is all upper case (lower case) characters?
  5. Learn Powershell | Achieve More
  6. How To Validate Parameters in PowerShell
  7. $args in powershell
  8. 我不是要求任何人为我编写代码。我想要一些示例代码,我可以了解如何验证和更改条目。

1 个答案:

答案 0 :(得分:3)

PowerShell默认情况下执行不区分大小写的比较,因此要回答问题的第一部分,您需要进行区分大小写的比较-ceq

$Type = Read-Host 'Enter MY, OLD, NEWTest, Old_Tests'
($Type -ceq 'MY' -or  $Type -ceq 'OLD' -or  $Type -ceq 'NEWTest' -or  $Type -ceq 'Old_Tests')

虽然更简单的解决方案是使用区分大小写的包含-ccontains:

('MY', 'OLD', 'NEWTest', 'Old_Tests' -ccontains $Type)

以下是解决问题的方法之一:

$Type = Read-Host 'Enter MY, OLD, NEWTest, Old_Tests'

If ('MY', 'OLD', 'NEWTest', 'Old_Tests'  -cnotcontains $Type){

    If ('MY', 'OLD', 'NEWTest', 'Old_Tests' -contains $Type){
        $TextInfo = (Get-Culture).TextInfo

        $Type = Switch ($Type) {
            {$_ -in 'MY','OLD'} { $Type.ToUpper() }
            'NEWTest'           { $Type.Substring(0,4).ToUpper() + $Type.Substring(4,3).ToLower() }
            'Old_Tests'         { $TextInfo.ToTitleCase($Type) }
        }  
    } Else {
        Write-Warning 'You didnt enter one of: MY, OLD, NEWTest, Old_Tests'
    }
}

Write-Output $Type

<强>解释

首先,我们测试四个允许的单词(-cnotcontains区分大小写不包含)的情况是否正确,如果我们什么都不做的话。如果案例不正确,那么我们测试文本是否正确(不关心区分大小写-contains)。

如果文本正确,那么我们使用Switch语句来处理我们想要调整案例的不同场景:

第一个开关测试与前两个单词匹配,只需用ToUpper()字符串方法对它们进行大写。

第二个交换机测试使用字符串方法SubString来获取从第一个字符(0)开始并且长度为4个字符的字符串子集。我们使用ToUpper将其大写,然后我们添加字符串的后3个字符,从第4个字符开始,我们强制使用ToLower()小写。

我们使用从get-culture cmdlet获取的.NET方法处理的最终切换测试,它允许我们将Title Case作为字符串(使每个单词的第一个字母为大写)。

如果输入的文字与我们使用write-warning的其中一个选项不匹配(可能需要PowerShell 4或更高版本,如果您没有将其更改为write-host)以打印警告到控制台。

最后输入的内容我们使用Write-Output发送给stdout。