【问题标题】:Validating user entry matches mixed case requirements验证用户输入是否符合混合大小写要求
【发布时间】:2017-03-29 13:29:17
【问题描述】:

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

目前我的代码包括:

$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

我没有要求任何人为我编写代码。我要求提供一些示例代码,以便了解如何验证和更改条目。

【问题讨论】:

    标签: validation powershell user-input case-sensitive


    【解决方案1】:

    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')
    

    虽然一个更简单的解决方案是使用区分大小写的 contains -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
    

    说明:

    首先我们测试四个允许单词的大小写是否正确(-cnotcontainsCase Sensitive Not Contains),如果是,我们什么也不做。如果大小写不正确,那么我们测试文本是否正确(不关心区分大小写-contains)。

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

    第一个 switch 测试匹配前两个单词,并使用 ToUpper() 字符串方法简单地将它们大写。

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

    我们使用从 get-culture cmdlet 获取的 .NET 方法处理的最终切换测试,该方法允许我们对字符串进行标题大小写(将每个单词的第一个字母大写)。

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

    最后,无论输入什么,我们都会使用Write-Output 发送到标准输出。

    【讨论】:

    • 如何将 newtest 更改为 NEWTest?
    • 对不起,马克,我昨天忙于其他项目,没有机会验证你的监护权。我已经测试了您的解决方案,但它仍然没有将大小写更改为上限或下限。输入 MY、OLD、NEWTest、Old_Tests:newtest Write-Output = newtest
    • 我的解决方案假设您想一次处理整个字符串,而不是处理单个选项。我会修改我的答案来解决这个问题。
    • 顺便说一句,很棒的博客...我将阅读您的多篇文章。你用我理解的英语解释。
    • 谢谢,很高兴你喜欢它!我已经修改了我的答案以处理输入是 4 个单独输入的字符串中的任何一个。
    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多