ValidateLength - 没有最大长度

Lig*_*War 2 powershell

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

[Parameter(Mandatory=$false)]
[ValidateLength(6,128)]
[string]$value
Run Code Online (Sandbox Code Playgroud)

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

[ValidateLength(6,0)]
Run Code Online (Sandbox Code Playgroud)

但这会产生运行时错误.

bri*_*ist 6

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

这些属性的参数是[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)

  • `[int] :: MaxValue`是`ValidateLength`的第二个参数的完美输入值,不一定是文字值 (3认同)