验证字符串参数的长度时:
[Parameter(Mandatory=$false)]
[ValidateLength(6,128)]
[string]$value
Run Code Online (Sandbox Code Playgroud)
是否有可能不强制执行最大长度(仅限最小值)?我试过了:
[ValidateLength(6,0)]
Run Code Online (Sandbox Code Playgroud)
但这会产生运行时错误.
直接使用该属性是不可能的.
这些属性的参数是[int]隐含的,你可以设置的最大值是[int]::MaxValue.
,但你不能直接使用该表达式,因为你需要一个文字.
所以,你可以硬编码的价值[int]::MaxValue但[int]在技术上可能在不同的平台上不同的大小(然后再一次,2 GB字符串可能甚至不起作用,所以硬编码2147483647可能不是最糟糕的事情).
我的测试脚本中有一个拼写错误,认为不可能[int]::MaxValue直接使用,但事实证明这不是真的(感谢Mathias让我回去再次检查):
[ValidateLength(6, [int]::MaxValue)]
Run Code Online (Sandbox Code Playgroud)
我在5.1版本上进行了测试,但似乎这在v2中可能不起作用,而且我不确定何时添加了确切的支持.
另一种可能性是使用脚本验证:
[ValidateScript( { $_.Length -ge 6 } )]
Run Code Online (Sandbox Code Playgroud)
如果你想要一个更好的错误信息,总有throw诀窍:
[ValidateScript( { $_.Length -ge 6 -or $(throw [System.ArgumentException]"String must be at least 6 characters") } )]
Run Code Online (Sandbox Code Playgroud)
另外,正如Bill和Ansgars所建议的那样,您可以使用正则表达式进行验证:
[ValidatePattern('^.{6,}$')]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |