精度为 2 的十进制数的正则表达式
RegEx for decimal number with precision of two
我需要一个只接受小数的正则表达式,最多两位小数。
我已经尝试过 ^\d{1,}(\.\d{2})?$'
但我不希望它使用可选组,因为这将允许 1
通过。如果去掉optional组,将不允许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
更改为字符串,但我不想浪费一行将其转换回双精度。
[\d]*?[.][\d]{2}(?=[\s\W])
考虑到 python 编写,但请查看:https://regex101.com/r/lT8xD9/1 以了解正在发生的事情。我认为它应该可以满足您的需求,但我对此也很陌生。
我认为你在这里问错了问题,因为一旦你转换为 double,你的正则表达式就永远不会在“1.00”上工作
当您将字符串转换为 [double]$bookPrice
时,尾随零消失。 double 不存储无意义的数字。如果用户键入 1.00
,则 $bookPrice
变量只是“1”,如果用户键入 1.10
,则它只是“1.1”——当您这样做时,多余的尾随零不会出现- 匹配双精度(你正在将双精度转换回字符串)。
当然,如果您只关心数字的字符串表示形式,那么您可以像这样指定输出格式 "{0:n2}" -f $bookPrice
以保证您始终有两位且只有两位小数...
我需要一个只接受小数的正则表达式,最多两位小数。
我已经尝试过 ^\d{1,}(\.\d{2})?$'
但我不希望它使用可选组,因为这将允许 1
通过。如果去掉optional组,将不允许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
更改为字符串,但我不想浪费一行将其转换回双精度。
[\d]*?[.][\d]{2}(?=[\s\W])
考虑到 python 编写,但请查看:https://regex101.com/r/lT8xD9/1 以了解正在发生的事情。我认为它应该可以满足您的需求,但我对此也很陌生。
我认为你在这里问错了问题,因为一旦你转换为 double,你的正则表达式就永远不会在“1.00”上工作
当您将字符串转换为 [double]$bookPrice
时,尾随零消失。 double 不存储无意义的数字。如果用户键入 1.00
,则 $bookPrice
变量只是“1”,如果用户键入 1.10
,则它只是“1.1”——当您这样做时,多余的尾随零不会出现- 匹配双精度(你正在将双精度转换回字符串)。
当然,如果您只关心数字的字符串表示形式,那么您可以像这样指定输出格式 "{0:n2}" -f $bookPrice
以保证您始终有两位且只有两位小数...