我需要一个正则表达式,它只接受十进制数,到两个小数。我已经尝试过^\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更改为string,但我不想浪费一行将其转换回double。
发布于 2015-02-22 07:54:05
我认为你问错了问题,因为一旦你投出双倍,你的判罚就永远不会在“1点”上起作用。
当您将字符串转换为[double]$bookPrice时,尾随零将消失。双位不存储无意义的数字。如果用户键入1.00,$bookPrice变量仅为"1“,如果用户键入1.10,则仅为"1.1”--当您对double执行-match时(将双返回转换为string),冗余尾随零将不会出现。
当然,如果您所关心的只是数字的字符串表示形式,那么您可以指定像这个"{0:n2}" -f $bookPrice那样的输出格式,以保证始终有两位小数,而且只有两位小数.
发布于 2015-02-22 05:24:48
[\d]*?[.][\d]{2}(?=[\s\W])
编写时考虑了python,但请查看:https://regex101.com/r/lT8xD9/1,以了解正在发生的事情。我认为它应该做你想要的,但我在这方面也有点新。
https://stackoverflow.com/questions/28654736
复制相似问题