RegEx表示精度为2的十进制数



我需要一个只接受小数到两位小数的正则表达式。我已经尝试过^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更改为字符串,但我不想浪费一行时间将其转换回double。

我认为你在这里问错了问题,因为一旦你转换为double,你的正则表达式就永远无法在"1.00"上工作

将字符串转换为[double]$bookPrice时,后面的零将消失。双精度不会存储无意义的数字。如果用户键入1.00,则$bookPrice变量仅为"1",如果用户键入1.10,则仅为"1.1"——当与double匹配时,多余的尾随零将不会显示(您将double强制转换回字符串)。

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

[d]*?[.][d]{2}(?=[sW])

考虑到python编写,但请查看:https://regex101.com/r/lT8xD9/1来解释正在发生的事情。我认为它应该满足你的需求,但我对此也有点陌生。

最新更新