验证字符串参数的长度时:
[Parameter(Mandatory=$false)]
[ValidateLength(6,128)]
[string]$value
是否可以不强制执行最大长度(仅限最小值)?我试过了:
[ValidateLength(6,0)]
但这会产生运行时错误。
答案 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,}$')]