繁体   English   中英

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

[英]Validating user input - that it is an integer and in a certain range

我有以下代码将检查用户输入是否为整数,但是我如何扩展它以确保它在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"

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

1..4 -contains $a

或者,您可以使用2个条件来做到这一点:

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

-ge是“大于或等于”, -le是“小于或等于”

如果要编写函数,则可以使用内置的参数验证来代替编写自定义块来验证输入。 这是一篇technet文章 ,详细介绍了该文章 在ISE中,您可以按Ctrl + J并选择complete的高级功能来自动创建示例。 这是简化版。

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()属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM