我需要一个只接受十进制数的正则表达式,两位小数。
我已经尝试^\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
更改为字符串,但我不想浪费一行将其转换回来。
答案 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以了解正在发生的事情。我认为它应该做你想要的,但我也是一个新的。