0

こんにちは frnds m このプログラムで問題に直面しています..cn どこで間違いを犯したのか教えてください?? 255.255.255.255 の IP アドレスを検証できない

puts "Enter a valid ip address:"
set string [gets stdin]
if {[regexp {^([1-9]|[1]\d{2}|[2][0-4]\d|25[0-5])((\.\d{0,2}|1\d{2}|2[0-4]\d|25[0-5]){3})$} $string match]} {
    puts $string
} else {
    puts "INVALID-ADDRESS"
}
4

7 に答える 7

5

車輪を再発明しないでください。IP アドレスを検証する方法の実例が多数あります。http://wiki.tcl.tk/989については、こちらを参照してください

また、TCLlib がある場合は、::ip::versionコマンドを使用できます。

% package require ip
1.2
% ::ip::version 192.168.0.1
4
% ::ip::version www.google.com
-1
% ::ip::version 192.168.0.333
-1
于 2012-05-17T10:06:17.867 に答える
1

初心者が理解しやすいパターンを示しています。

pattern: /^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/
于 2012-09-04T08:54:35.297 に答える
1
proc validateIP {IP} {
    if {[regexp {^(?:(\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))(?:\.((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))){3}$} $IP]} {
        puts "$IP is a valid IP"
    } else {
        puts "INVALID-ADDRESS"
    }
}

正規表現にいくつかのエラーがありました。特に、ドットの配置は最初の可能性のみでグループ化されました

于 2012-05-17T15:02:33.687 に答える
1
% set ip "192.168.123.23"
192.168.123.23
% regexp {([0-9]+\.)([0-9]+\.)([0-9]+\.)([0-9]+)} $ip match a b c d
1
% if {$a <= 255 & $b <= 255 & $c <= 255 & $d <= 255} {
  puts "this is a valid ip address"
  } else {
  puts "this not a valid ip address"
 }

これは有効な IP アドレスです

于 2012-10-19T10:40:22.987 に答える
0
puts "enter your ip address"
set ip [gets stdin]
regexp {([0-9]+)\\.([0-9]+)\\.([0-9]+)\\.([0-9]+)} "$ip" match 1st 2nd 3rd 4rth

if {$1st < 256 & $2nd < 256 & $3rd <256 & $4rth<256} { // numbers in range?
  puts "valid IP address"
} else { 
  puts "not valid IP address"
}
于 2012-09-23T07:03:07.760 に答える