如何确保函数只接受正整数?

a_m*_*016 6 int powershell

我想对PowerShell中的用户输入进行一些基本验证,以确保用户只能输入整数,例如不输入-7.我不确定这是怎么做的,并且会欣赏指针.

[parameter(Mandatory=$false)][int]$number
Run Code Online (Sandbox Code Playgroud)

如果用户输入-$number此将被接受.我希望它拒绝这种类型的输入.

Joe*_*oey 14

您可以使用ValidateRange参数:

[parameter(Mandatory=$false)]
[ValidateRange(1, [int]::MaxValue)]
[int] $number
Run Code Online (Sandbox Code Playgroud)

文档:

ValidateRange验证属性

ValidateRange属性指定每个参数或变量值的数值范围.如果任何值超出该范围,则Windows PowerShell会生成错误.在以下示例中,Attempts参数的值必须介于0和10之间.

Param
(
    [parameter(Mandatory=$true)]
    [ValidateRange(0,10)]
    [Int]
    $Attempts
) 
Run Code Online (Sandbox Code Playgroud)

在以下示例中,变量$ number的值必须介于0和10之间.

[Int32][ValidateRange(0,10)]$number = 5
Run Code Online (Sandbox Code Playgroud)

  • 基于此处显示的内容,这并不明显,但需要澄清-在此示例中,使用[int]类型的ValidateRange(0,10)包含零和十数字边界。因此,在此示例中,给定的值为0或10,它应该是有效的并且不会产生错误。 (2认同)

mhu*_*mhu 6

从 PowerShell 6.1.0 开始,您可以使用 ValidateRangeKind 来初始化属性:

[Parameter(Mandatory = $false)]
[ValidateRange("Positive")]
[Int] $Number = 5

Run Code Online (Sandbox Code Playgroud)

ValidateRange 验证属性

ValidateRange 属性为每个参数或变量值指定一个数字范围或一个 ValidateRangeKind 枚举值。如果任何值超出该范围,PowerShell 会生成错误。

ValidateRangeKind 枚举允许使用以下值:

  • 正数 - 大于零的数字。
  • 负数 - 小于零的数字。
  • NonPositive - 小于或等于零的数字。
  • NonNegative - 大于或等于零的数字。