2016-07-27 19 views
1

私は奇妙な振る舞いをするいくつかのコードを持っています。私はユーザー入力が数字であり、それが255未満であることを検証しようとしています。かなり簡単です。powershellのユーザー入力の有効化が有効な入力を受け付けていない

問題は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

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 

を試してみては$ip_addr_firstがここにすべての違いを作る、と比較されることを保証[int]キャストを、注意してください。 $ip_addr_firstことを考えることなし

は、-gt字句比較を行い、ストリングRead-Hostによって返されるタイプ)であり、そして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 
+0

おかげで...キャストは、私はちょうどPowerShellの –

+0

@PS_newbieを学んでいるので、私にとって新しいものである:私の喜び。 PowerShellでは、型について心配する必要はありませんが、機会に応じて、基本的な(.NETの)型とその検査方法( 'Get-Member')の理解と変換が一般的です。私の代わりの解決法は、初期化中に変数を型制約する方法を示しています(永続的なキャスト、言い方をすれば)。 – mklement0

関連する問題