ValidateLength - 没有最大长度

时间:2017-09-25 15:45:01

标签: powershell

验证字符串参数的长度时:

[Parameter(Mandatory=$false)]
[ValidateLength(6,128)]
[string]$value

是否可以不强制执行最大长度(仅限最小值)?我试过了:

[ValidateLength(6,0)]

但这会产生运行时错误。

1 个答案:

答案 0 :(得分:6)

直接使用该属性是不可能的。

该属性的参数为[int],因此您可以设置的最大值为[int]::MaxValue

,但你不能直接使用该表达式,因为你需要一个文字。

所以,您可以硬编码[int]::MaxValue的值,但[int]在不同平台上技术上可能是不同的大小(然后,2 GB字符串可能甚至不起作用所以硬编码2147483647可能不是最糟糕的事情。)

我的测试脚本中有一个拼写错误,认为直接使用[int]::MaxValue是不可能的,但事实证明这不是真的(感谢Mathias让我回去检查它再次):

[ValidateLength(6, [int]::MaxValue)]

我在5.1版本上测试过,但似乎这在v2中可能不起作用,而且我不确定何时添加了完全支持。

另一种可能性是用脚本验证:

[ValidateScript( { $_.Length -ge 6 } )]

如果您想要更好的错误消息,请始终使用throw技巧:

[ValidateScript( { $_.Length -ge 6 -or $(throw [System.ArgumentException]"String must be at least 6 characters") } )]

另外,正如Bill和Ansgars所建议的那样,您可以使用正则表达式进行验证:

[ValidatePattern('^.{6,}$')]