RegEx为十进制数,精度为2

时间:2015-02-22 05:01:45

标签: regex powershell decimal

我需要一个只接受十进制数的正则表达式,两位小数。 我已经尝试^\d{1,}(\.\d{2})?$'但我不希望它使用可选组,因为这样可以通过1。如果取出可选组,则不允许1.00通过。

我的代码:

[double]$bookPrice = read-host "Enter book price "
if($bookPrice -notmatch '^\d{1,}(\.\d{2})?$'){
        [console]::beep(500,300)
        Write-Host "invalid"
}

有效:

1.00
1.12

无效:

1
1.000000

我认为唯一可以解决问题的是将变量$bookPrice更改为字符串,但我不想浪费一行将其转换回来。

2 个答案:

答案 0 :(得分:1)

我认为你在这里提出了错误的问题,因为一旦你加倍,你的正则表达式永远不会起作用" 1.00"

将字符串转换为[double]$bookPrice时,尾随零消失。双倍并不存储无意义的数字。如果用户输入1.00 $bookPrice变量只是" 1"如果用户键入1.10,则只需" 1.1" - 当您对双精度进行匹配时,多余的尾随零表示不会显示(您将双重投回到字符串中)。

当然,如果你所关心的只是数字的字符串表示,那么你可以指定输出格式,如"{0:n2}" -f $bookPrice,以保证你总是有两个而且只有两个小数位...

答案 1 :(得分:0)

[\d]*?[.][\d]{2}(?=[\s\W])

用python编写,但请查看:https://regex101.com/r/lT8xD9/1以了解正在发生的事情。我认为它应该做你想要的,但我也是一个新的。