我正在制作一个脚本,提示用户输入图书的价格 到目前为止,我有这个:
[Decimal]$BookPrice = Read-Host "Enter the price of the book"
$BookPriceRounded = "{0:C2}" -f $BookPrice
如果你输入一个数字就可以了,但问题是,如果你输入一个字母,它会显示
“无法将值”5t“转换为”System.Decimal“。错误:”输入字符串的格式不正确。“ 在行:1 char:20 + [十进制] $ BookPrice<<<< =读取主机“输入书籍的价格” + CategoryInfo:MetadataError:(:) [],ArgumentTransformationMetadataException + FullyQualifiedErrorId:RuntimeException“
它会停止工作。
我想要做的不是给用户这个错误,而是提示他们只输入数字。我怎样才能做到这一点?
答案 0 :(得分:1)
您可以使用正则表达式替换任何非数字字符:
[Decimal]$BookPrice = Read-Host "Enter the price of the book"
$BookPriceRounded = "{0:C2}" -f ($BookPrice -replace '[^0-9\.]','')
或者你必须用逻辑检查输入:
Clear-Host
$BookPrice = Read-Host "Enter the price of the book"
while ($BookPrice -NotMatch "[0-9]+(\.[0-9]+)?") {
$BookPrice = Read-Host "Please enter a number or decimal only"
}
$BookPriceRounded = "{0:C2}" -f [Decimal]$BookPrice
Write-Host $Bookpricerounded
顺便说一下,我在字符类中添加了.
,以防你想要匹配浮点数。否则,您应该将该字符类更改为[^0-9]
。