我想使用正则表达式检查表列表中的用户输入。
通常,我只想使用以下数字0-9
:
$w configure -invalidcommand bell -validate key -validatecommand {regexp {^[0-9]*$} %S}
工作正常。现在我想将此表达式扩展为仅允许数字0-9或确切的单词“Rigid”。我尝试了这个,但它允许我输入任何内容。
$w configure -invalidcommand bell -validate key -validatecommand {regexp {regexp {^([0-9])|^Rigid?\>*$} %S}
答案 0 :(得分:3)
您可以考虑将验证码放入proc:
$w configure -invalidcommand bell -validate key -validatecommand {validate %S}
proc validate {data} {
return [regexp {^(?:[0-9]*|Rigid)$} $data]
# or
return [expr {$data eq "Rigid" || [string is integer $data]}]
}
或
答案 1 :(得分:1)
^([0-9])|^Rigid?\>*$
模式允许匹配超出您需要的匹配,因为^
仅适用于([0-9])
,一个数字,因此第一个字符应该是一个数字,其余的可以是任何。 ^Rigid?\>*$
匹配以Rigi
开头的字符串,后面可能有d
,然后有0 + >
个符号。
你需要
{^(?:[0-9]*|Rigid)$}
这里,锚点应用于两个模式,只允许0+数字或Rigid
作为整个字符串。
答案 2 :(得分:0)
$ w configure -invalidcommand bell -validate key -validatecommand {regexp {^ [0-9] * $}%S}
这将允许null或“0-9范围内的一个或多个数字”。
要确保至少1位数,请使用+而不是*。
现在回答你的问题 - 允许数字0-9或确切的单词“Rigid”
使用{(^ [0-9] + $ | ^ Rigid $)}
让网站成为我刚刚尝试过的一个例子:
设置[获取标准输入]
if {[regexp - {(^ [0-9] + $ | ^ Rigid $)} $ a]} { 把“是” } else { 把“不” }
输出:
$ tclsh test1 12 是 $ tclsh test1 死板 是 $ tclsh test1 死板 没有 $ tclsh test1 32瓦特 没有 $ tclsh test1
没有
$