检查用户输入是否正确

11 浏览
0 Comments

检查用户输入是否正确

我写了一个bash脚本,通过用户输入接收数字进行计算。我遇到的问题是,如果用户错误地输入了字母或空格,整个脚本就会失败,用户必须重新开始。

肯定有一种简单的方法来检查输入是否仅为数字,如果意外输入其他内容,将要求重新输入。

0
0 Comments

问题的出现原因是用户输入的内容可能不符合要求,即不是一个有效的整数。解决方法是使用while循环来检查用户输入是否正确,并通过正则表达式来验证输入的内容是否为整数。代码中的while循环会一直执行,直到用户输入的内容满足正则表达式^[0-9]+$的要求,即只包含数字字符。如果用户输入的内容不满足要求,会提示用户重新输入直到输入正确为止。这样可以确保获取到正确的用户输入。为了避免变量在下一次循环中保留上一次输入的值,需要在进入循环之前将变量的值设置为空字符串。另外,为了更准确地验证输入的内容,正则表达式应该包含字符串的开头和结尾,并且要将整个正则表达式用括号括起来,即^(^[0-9]+$)$。这样可以确保只有完全匹配整个字符串的输入才会被接受。通过以上的解决方法,可以有效地检查用户输入是否正确。

0
0 Comments

用户输入正确性检查的问题可能出现的原因是用户输入的内容不符合要求,例如包含字母或超出指定范围。解决方法可以通过使用正则表达式来检查用户输入是否符合要求,或者使用条件语句和循环来反复要求用户输入,直到输入正确为止。

下面是一些解决方法的示例代码:

# -- get input until Correct
unset get_num
while [[ ! ${get_num} =~ ^[0-9]+$ ]]; do
    echo "Please enter in a number:"
    read get_num
done
echo This is a number :  ${get_num}

# -- get input until Correct (within range)
unset get_num
while [[ ! ${get_num} =~ ^[0-9]+$ ]]; do
    echo "Please enter in a number within range of (1-30):"
    read get_num
    ! [[ ${get_num} -ge 1 && ${get_num} -le 30  ]] && unset get_num
done
echo This is a number withn a range :  ${get_num}

# -- get input until Correct (within range) (full regex way)
unset get_num
while [[ ! ${get_num} =~ ^([1-9]|1[0-9]|2[0-9]|30)$ ]]; do
    echo "Please enter in a number within range of (1-30):"
    read get_num
done
echo This is a number withn a range :  ${get_num}

# -- get input, and check it only (no while loop)
unset get_num
echo "Please enter in a number:"
read get_num
if [[ ! ${get_num} =~ ^[0-9]+$ ]] ;then 
    echo "${get_num} isn't a number" 
else
    echo "${get_num} is a number"
fi

通过使用这些方法,我们可以检查用户输入是否正确,并根据需要进行相应的处理。

0
0 Comments

用户输入正确性检查的原因是为了确保输入的数据符合要求。这可以避免在后续的处理过程中出现错误或异常情况。然而,上述代码中存在问题,即它不完全满足需求。

在给出解决方法之前,我们首先来看看问题的具体原因。代码中使用了简单的通配符(glob)来检查输入是否为数字。然而,该代码存在两个问题。首先,当输入为空时,代码会接受它,而实际上为空并不符合要求。其次,通配符表达式中使用了错误的语法,导致无法正确检查输入是否为数字。

为了解决这些问题,我们可以采取以下措施。首先,我们需要修改通配符表达式,以正确检查输入是否为数字。其次,在检查之前,我们需要添加额外的条件来排除空输入。这样就能够确保输入的正确性。

下面是修改后的代码示例:

if [[ -z $input || $input =~ [^0-9]+ ]]; then
    echo "Error: '$input' is not a number." >&2
fi

通过使用`-z`选项来检查输入是否为空,并使用`=~`操作符来进行正则表达式匹配,我们可以正确地检查输入是否为数字。如果输入不是一个数字,将会输出错误信息。

通过以上修改,我们可以确保用户输入的正确性,并避免在后续处理过程中出现问题。

0