2017-09-25 81 views
2

当验证字符串参数的长度:ValidateLength - 无最大长度

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

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

[ValidateLength(6,0)] 

但是这样会产生运行时错误。

+0

1)使用非常长的最大长度。 2)使用'[ValidatePattern('。{6}。*')]'。 (虽然这个错误并不是那么漂亮)3)使用'[ValidateScript({$ _。Length -gt 5})]''(同样的问题与错误的错误,尽管如此。)4)检查最小长度该函数而不是参数属性,并且如果太短会引发错误(例如,在运行时检查长度)。 –

回答

6

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

该属性的参数是[int] s,因此可以隐式设置的最大值是​​。

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

所以,你可以硬编码的​​但[int]价值可能在技术上是在不同的平台不同尺寸(话又说回来,2 GB的字符串,甚至可能没有这么辛苦编码2147483647未必是最坏的事情)。

我在我的测试脚本有一个错字,并认为这是无法直接使用​​,但事实证明,这是不正确(感谢马蒂亚斯让我回去检查一遍):

[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") })] 

此外,由比尔的建议和Ansgars,你可以验证一个正则表达式:

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

'[ValidateLength(6,[int] :: MaxValue)]'在我测试时运行正常,即使从PowerShell外部启动脚本。另一种选择是'[ValidatePattern('^。{6,} $')]'。 –

+0

或者:在运行时检查长度,如果太短,则会发出错误。 (具有让你编写自己的错误信息的好处。) –

+0

@AnsgarWiechers我也添加了正则表达式检查。 – briantist