我试图弄清楚如何测试混合大小写或将用户输入更改为混合大小写。
目前我的代码包括:
$Type = Read-Host 'Enter MY, OLD, NEWTest, Old_Tests'
但是,我需要验证用户输入的确切情况,如果他们没有将案例更改为正确的情况。我在这里和其他网站上已经回顾了很多不同的问题,但似乎没有人真正谈论以我能理解的方式验证混合案例。
答案 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。