Powershell,检查空白输入,零评估为空白/空

时间:2015-09-01 16:53:41

标签: powershell input null

我正在尝试验证一个简单的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“”。允许零和禁止空白输入的正确方法是什么?

3 个答案:

答案 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>