我有一些表现奇怪的代码,我不知道为什么。我试图验证用户输入是一个数字,并且它小于255.非常简单。
问题是我的测试中26到99的数字对我无效。 1-25很好,100+似乎也很好..但由于某种原因26-99让我陷入困境。
DO
{
$ip_addr_first = Read-Host 'enter a number less than 255'
} while ($ip_addr_first -notmatch '\p{Nd}+' -or $ip_addr_first -gt 255)
write-host 'You entered' $ip_addr_first
建议欢迎问题出在哪里,因为我在这里不知所措。
答案 0 :(得分:0)
尝试
do
{
$ip_addr_first = Read-Host 'Enter an integer between 0 and 255'
} while ($ip_addr_first -notmatch '^\p{Nd}+$' -or [int] $ip_addr_first -gt 255)
write-host 'You entered:' $ip_addr_first
请注意[int]
广告系列,以确保将$ip_addr_first
作为号进行比较,这在这里有所不同。
没有它,假设$ip_addr_first
是字符串(Read-Host
返回的类型),-gt
执行 lexical 比较,例如,26
词法大于255
(同样适用于以3
或更高开头的任何数字(字符串)。
另请注意,我已使用p{Nd}+
和^
锚定您的正则表达式$
,以确保整个输入与它匹配(你可以通过允许前导和尾随空格使这更容易)。
仅使用数字解析的替代方法:
[int] $ip_addr_first = -1
do
{
$userInput = Read-Host 'Enter an integer between 0 and 255'
} while (-not ([int]::TryParse($userInput, [ref] $ip_addr_first) -and
$ip_addr_first -ge 0 -and $ip_addr_first -le 255))
write-host 'You entered:' $ip_addr_first