使用tcl验证ip地址

使用tcl验证ip地址,tcl,Tcl,您好,我在这个节目中遇到了问题..cn有人告诉我哪里出错了吗?? m nt无法验证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 } el

您好,我在这个节目中遇到了问题..cn有人告诉我哪里出错了吗?? m nt无法验证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"
}
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"
}

不要重新发明轮子。关于如何验证IP地址,有几十个工作示例。看看这里

另外,如果您有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

您的正则表达式出现了一些错误,特别是点的位置仅与第一种可能性分组

我只是给初学者提供了最简单的模式以供理解

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])$/
输入“输入您的ip地址”
设置ip[gets stdin]
regexp{([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)}“$ip”匹配第一个第二个第三个第四个
如果{$1st<256&$2nd<256&$3rd
%设置ip“192.168.123.23”
192.168.123.23
%regexp{([0-9]+\)([0-9]+\)([0-9]+\)}$ip匹配ABCD
1.

%如果{$a使用正则表达式验证IP地址不是很好。事实上,它在许多更模糊的地址形式上也会失败。我强烈推荐Brian的答案描述的方法…@Pratibha,这是否回答了您的问题?如果是,请接受答案。请编辑您的答案并格式化代码,使其重新生效可接受的。虽然此代码可能会解决问题,但如何以及为什么解决此问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,您是在将来为读者回答问题,而不仅仅是现在问问题的人。请您的答案添加解释,并说明原因适用的限制和假设。
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"
}
% 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"
 }
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"
}
set ip 100.12.230.250

set mat [regexp -nocase {(([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$} $ip match]


if {$mat == 1} {
    puts "Valid Ip"
} else {
   puts "Invalid Ip"
}