ValidatePatternAttribute接受无效输入

时间:2015-10-09 13:50:37

标签: powershell

我在文件“Publish-MyProj.ps1”中有一个powershell脚本,其头部定义如下:

[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

即使第一个数字超过允许的数字,也不会失败。

这是一个错误还是我做错了?

1 个答案:

答案 0 :(得分:2)

这是因为你没有指定你的正则表达式从字符串的开头匹配,所以它匹配1 11.2.25 并且不会失败。

使用此正则表达式(注意^修饰符):^\d{1,2}\.\d{1,2}\.\d{1,3}

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

P.S。您可以在https://regex101.com轻松测试正则表达式,看看匹配与否。

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