powershell用户输入验证不接受有效输入

时间:2016-07-27 02:49:14

标签: validation powershell input

我有一些表现奇怪的代码,我不知道为什么。我试图验证用户输入是一个数字,并且它小于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

建议欢迎问题出在哪里,因为我在这里不知所措。

1 个答案:

答案 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