验证用户输入 - 它是一个整数并且在一定范围内

时间:2015-01-29 19:39:37

标签: validation powershell

我有以下代码来检查用户的输入是否是整数,但是如何扩展它以确保它在1到4的范围内?

    $a = 0
$inputOK = $false
do
{
  try
  {
    $a = Read-Host "Please enter the number between 1 and 4"
    if (([int]$a) -and (1..4 -contains $a)) {
    $inputOK = $true}
  }
  catch
  {
    Write-Host -ForegroundColor red "INVALID INPUT!  Please enter a numeric value."
  } 

}
until ($inputOK)
Write-Host –ForegroundColor green "You have entered $a"

2 个答案:

答案 0 :(得分:2)

您可以使用范围和-contains运算符:

1..4 -contains $a

或者您可以使用2个条件:

($a -ge 1) -and ($a -le 4)

-ge"大于或等于"并且-le是"小于或等于"

答案 1 :(得分:2)

如果您正在编写函数,而不是编写自定义块来验证输入,则可以使用内置参数验证。这是一个详细描述的technet article。在ISE中,您可以按Ctrl + J并选择高级功能完成以自动创建示例。这是一个简化版本。

function Test-ParameterValidation
{
[OutputType([String])]
Param
(
    # Param1 help description
    [Parameter(Mandatory=$true, 
               ValueFromPipeline=$true)]
        [ValidateNotNull()]
        [ValidateNotNullOrEmpty()]
        [ValidateCount(1,5)]
        [ValidateSet("sun", "moon", "earth")]
        [Alias("p1")] 
        $Param1,

        [AllowNull()]
        [AllowEmptyCollection()]
        [AllowEmptyString()]
        [ValidateScript({$true})]
        [ValidateRange(0,5)]
        [int]
        $Param2,

        [ValidatePattern("^\d{5}(?:[-\s]\d{4})?$")]
        [ValidateLength(5,10)]
        [String]
        $Param3
    )
    process{
    "p1 is $Param1"
    "p2 is $Param2"
    "p3 is $Param3"

    }
}

样本输入/输出。

C:\ > Test-ParameterValidation -Param1 earth,moon
p1 is earth moon
p2 is 0
p3 is 

C:\ > Test-ParameterValidation -Param1 earth,moon,moon,moon,moon,moon
Test-ParameterValidation : Cannot validate argument on parameter 'Param1'. The number of supplied arguments (6) exceeds the maximum number of allowed arguments (5). Specify less than 5 arguments and then try the command again.
At line:1 char:34
+ Test-ParameterValidation -Param1 earth,moon,moon,moon,moon,moon
+                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Test-ParameterValidation], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Test-ParameterValidation


C:\ > Test-ParameterValidation -Param1 earth,moon,moon,moon -Param2 5 -Param3 ABC
Test-ParameterValidation : Cannot validate argument on parameter 'Param3'. The number of characters (3) in the argument is too small. Specify an argument whose length is greater than or equal to "5" and then try the command again.
At line:1 char:73
+ Test-ParameterValidation -Param1 earth,moon,moon,moon -Param2 5 -Param3 ABC
+                                                                         ~~~
    + CategoryInfo          : InvalidData: (:) [Test-ParameterValidation], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Test-ParameterValidation


C:\ > Test-ParameterValidation -Param1 earth,moon,moon,moon -Param2 5 -Param3 ABCDEF
Test-ParameterValidation : Cannot validate argument on parameter 'Param3'. The argument "ABCDEF" does not match the "^\d{5}(?:[-\s]\d{4})?$" pattern. Supply an argument that matches "^\d{5}(?:[-\s]\d{4})?$" and try the command again.
At line:1 char:73
+ Test-ParameterValidation -Param1 earth,moon,moon,moon -Param2 5 -Param3 ABCDEF
+                                                                         ~~~~~~
    + CategoryInfo          : InvalidData: (:) [Test-ParameterValidation], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Test-ParameterValidation


C:\ > Test-ParameterValidation -Param1 earth,moon,moon,moon -Param2 5 -Param3 11111-1111
p1 is earth moon moon moon
p2 is 5
p3 is 11111-1111

C:\ > Test-ParameterValidation -Param1 earth,moon,moon,moon -Param2 6
Test-ParameterValidation : Cannot validate argument on parameter 'Param2'. The 6 argument is greater than the maximum allowed range of 5. Supply an argument that is less than or equal to 5 and then try the command again.
At line:1 char:63
+ Test-ParameterValidation -Param1 earth,moon,moon,moon -Param2 6
+                                                               ~
    + CategoryInfo          : InvalidData: (:) [Test-ParameterValidation], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Test-ParameterValidation

这些使您能够在标准" powershelly"中提供验证错误。没有额外写任何东西的方式。虽然如果需要进行重载验证,可以使用ValidateScript()属性。

相关问题