验证输入框中的用户输入

Validating user input in inputbox

当我 运行 以下代码段并输入可接受的值时,我得到了想要的结果。

do while len(strselect) = 0  'or strselect<>"1" or strselect<>"2" or strselect<>"3"
strselect = inputbox ("Please select:" &vbcrlf&vbcrlf&_  
"1. Add an entry" &vbcrlf&vbcrlf&_  
"2. Remove an entry" &vbcrlf&vbcrlf&_  
"3. Search for an entry" &vbcrlf, "Contact Book")
if isempty(strselect) then
wscript.quit()
elseif strselect="1" then
wscript.echo "You chose 1"
elseif strselect="2" then
wscript.echo "You chose 2"
elseif strselect="3" then
wscript.echo "You chose 3"
end if
loop

但是,如果我尝试进一步限制验证过程(通过在 do while 条件中包含注释),并再次 运行 代码段,我会触发相应的 if 条件,但 do 循环继续,而不是退出。

我已经尝试在 do 循环 strselect 条件下使用 isnumericcstr,但没有任何乐趣......我错过了什么才能得到该死的东西退出循环的事情?

你的条件逻辑有问题

         condition 1            condition 2       condition 3       condition 4
         v----------------v     v------------v    v------------v    v............v
do while len(strselect) = 0  or strselect<>"1" or strselect<>"2" or strselect<>"3"

根据 strselect 中的值,您有

value   c1      c2      c3      c4    
        len=0   <>"1"   <>"2"   <>"3"    c1 or c2 or c3 or c4
--------------------------------------   --------------------
empty   true    true    true    true            true
  1     false   false   true    true            true
  2     false   true    false   true            true
  3     false   true    true    false           true
other   false   true    true    true            true

在每一行中,您至少有一个条件评估为 true,并且当您将条件与 Or 运算符连接时(如果至少有一个值为真,则评估为真) ,完整条件被评估为真并且代码不断循环

你只需要改变条件

Do While strselect<>"1" And strselect<>"2" And strselect<>"3"
Do While Not (strselect="1" Or strselect="2" Or strselect="3")
....