2012-05-17 112 views
0

你好弗蘭茲m在這個程序面臨的問題..任何告訴我在哪裏我犯錯誤? 米新臺幣能夠驗證爲255.255.255.255的IP地址驗證使用tcl的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" 
} 
+0

使用正則表達式來驗證IP地址是不怎麼好看。事實上,它也會以許多更晦澀的方式失敗。我強烈建議布賴恩的答案描述的方法...... –

回答

5

不要推倒重來。有幾十個關於如何驗證IP地址的工作示例。看到這裏的一些http://wiki.tcl.tk/989

此外,如果有TCLlib可以使用:: IP ::版本命令如

% 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 
+1

@Pratibha,這是否回答你的問題?如果是這樣,請接受答案。 – TrojanName

0
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" 
    } 
} 

有一些幾個錯誤你的正則表達式,特別是配售的點組只有第一個可能性

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])$/ 
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" 
} 
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地址

2
set ip "1.2.3.4" 
if { [ catch[regexp {(\d+)\.(\d+)\.(\d+)\.(\d+)} $ip man]] } { 
    set flag 0 
} 
set cut [split $ip "."] 
set flag "" 
if {[llength $cut] == 4} { 
    set flag 1 
} else { 
    set flag 0 
} 
if {[lindex $cut 0] == 0} { 
    set flag 0 
} 
foreach nut $cut { 
    if {[string length $nut] > 3} { 
     set flag 0 
    } 
    if {$nut > 255} { 
     set flag 0 
    } 
    set a [split $nut ""] 
    if { [lindex $a 0] == 0 } { 
     set flag 0 
    } 
    #set int [lappend mat $nut] 
} 
if {$flag == 0} { 
    puts "Not a valid IP" 
} else { 
    puts "IP IS VALID:$man" 
} 
+0

請編輯您的答案並格式化代碼以使其可讀。 – kleopatra