2017-09-25 93 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