我正在尝试验证一个简单的PowerShell输入。我想允许数字零作为有效输入,但空白(只按输入)无效输入。我在验证时遇到了最困难的时期。当用户输入数字零时,一切都有效。 我试过检查长度,检查空值等。 请考虑以下代码。 如果输入0(零),则输出与按[enter](无输入)
的输出相同Pick a number 0-6: 0
You picked 0
blank input
equals zero
too short
$OUchoice = -1
do
{
try{
$OUchoice = Read-Host "Pick a number 0-6"
}
catch{
write-host "invalid input"
}
Write-Host "You picked $OUchoice"
if ($OUchoice -gt 6) {write-host "too high"}
if ($OUchoice -lt 0) {write-host "too low"}
if ($OUchoice -eq "") {write-host "blank input"}
if ($OUchoice -eq 0 ) {write-host "equals zero"}
if ($OUchoice -eq $null ) {write-host "Null"}
if (!($OUchoice)) {write-host "too short"}
}
until (($OUchoice -ge 0) `
-and ($OUchoice -le 6) `
-and (($ouchoice)))
write-host "OK"
我试过-eq $ NULL和-eq“”。允许零和禁止空白输入的正确方法是什么?
答案 0 :(得分:4)
问题在于:
PS> 0 -eq ""
True
当比较两个不同类型的值时,第二个参数被转换为第一个的类型。不幸的是你:
PS> [int]""
0
当投放到int
生成0
时,空字符串。在您的情况下,修复很容易:只需反转操作数的顺序,因为0
转换为字符串最终会成为'0'
:
if ("" -eq $OUchoice) {write-host "blank input"}
答案 1 :(得分:1)
这就是我想出的。当你将它与其他数字进行比较时,我确保$ OUChoice是一个Int。这可确保空输入为0,并允许负值。
$OUchoice = -1
do
{
try{
$OUchoice = Read-Host "Pick a number 0-6"
}
catch{
write-host "invalid input"
}
Write-Host "You picked $OUchoice"
Switch ($OUchoice) {
{
[string]::IsNullOrEmpty($OUchoice)} {
write-host "Null Input"
Break
}
{
[int]$OUchoice -gt 6} {
write-host "too high"
Break
}
{
[int]$OUchoice -lt 0} {
write-host "too low"
Break
}
{
[int]$OUchoice -eq 0 } {
write-host "equals zero"
Break
}
}
}
until (([int]$OUchoice -ge 0) -and ([int]$OUchoice -le 6) -AND (-NOT [string]::IsNullOrEmpty($OUchoice)))
write-host "OK"
答案 2 :(得分:0)
嵌套你的ifs(我测试不多,但确实检查了零和空白的情况):
if (-not ($OUchoice -eq ""))
{
if ($OUchoice -gt 6) {write-host "too high"}
if ($OUchoice -lt 0) {write-host "too low"}
if ($OUchoice -eq 0 ) {write-host "equals zero"}
if ($OUchoice -eq $null ) {write-host "Null"}
if (!($OUchoice)) {write-host "too short"}
}
else
{
Write-Output "blank input"
}
输出:
PS C:\users\mattp_000> .\x.ps1
Pick a number 0-6:
You picked
blank input
Pick a number 0-6: 0
You picked 0
equals zero
OK
PS C:\users\mattp_000> .\x.ps1
Pick a number 0-6: 3
You picked 3
OK
PS C:\users\mattp_000>