Иногда проще не использовать регулярное выражение для всего, а вместо этого использовать его вместе с другой операцией. Некоторые типы проверки также намного понятнее, если они помещены во вспомогательную процедуру:
proc ValidateString {input} {
foreach part [split $input ":"] {
# A regular expression is the easiest way of validating the interior pieces
if {![regexp {^[A-Z]{3}[0-9]{2}$} $part]} {
return false
}
}
return true
}
set user_input_1 "AAB22:GHD23:UDJ29:YUD51"
if {[ValidateString $user_input_1]} {
puts "Input Criteria Meet"
} else {
puts "Input Criteria not meet"
}
Вы могли бы вместо этого использовать более сложный RE, например:
# ...
if {[regexp {^[A-Z]{3}[0-9]{2}(:[A-Z]{3}[0-9]{2})*$} $user_input_1]} {
# ...
но это значительно труднее читать, если вы не переключитесь на расширенную форму, и в ней отсутствует более четкая мнемоника именованной вспомогательной процедуры, поэтому я бы не рекомендовал ее.