Команда string is int
выполняет большую часть работы. Вы можете использовать tcl::mathop::<=
для отдыха:
set MIN_INT -0x80000000
set MAX_INT 0x7FFFFFFF
if {[string is int -strict $value] && [tcl::mathop::<= $MIN_INT $value $MAX_INT]} {
puts "$value is a proper 32-bit signed integer"
}
Вы можете использовать это, если хотите (круглые скобки только для ясности):
if {[string is int -strict $value] && ($MIN_INT <= $value) && ($value <= $MAX_INT)} {