2015-10-09 61 views
0

我有在文件中的腳本的powershell「發佈-MyProj.ps1」與這樣定義的報頭:ValidatePatternAttribute接受無效輸入

[CmdletBinding()] 
Param(
    [Parameter(Mandatory=$True)] 
    [ValidatePattern("\d{1,2}\.\d{1,2}\.\d{1,3}")] 
    [string]$Version 
) 

當我運行這樣的腳本:

.\Publish-MyProj.ps1 10.2 

它顯示一個錯誤,這是一個預期的行爲。

然而,當我與一個幾乎正常的版本上運行它:

.\Publish-MyProj.ps1 111.2.25 

它不會失敗,即使第一數量超過允許位數。

這是一個錯誤還是我做錯了?

回答

2

這是因爲你沒有指定你的正則表達式匹配從字符串的開頭,所以它匹配1 11.2.25並且不會失敗。

使用這個表達式(注意^改性劑):^\d{1,2}\.\d{1,2}\.\d{1,3}

甚至更​​好:^\d{1,2}\.\d{1,2}\.\d{1,3}$

附:你可以很容易地在https://regex101.com測試你的正則表達式,看看有沒有匹配。

例子:https://regex101.com/r/aD8xU2/1

+0

我努力學習PowerShell的,所以我已經完全錯過了這個新手的錯誤,而我的心是在其他地方。 – Santhos

+0

@Santhos我認爲我們都有這些時刻:)。 – beatcracker