读取值验证

读取值验证

有没有办法验证或确认用户所写的内容是否正确read

  • 例如,用户想要写“Hello world!”但错误地写了“Hello world@”。

  • 这与电子邮件/电话字段的联系表单验证非常相似。

有没有办法在阅读时提示用户“请重新输入输入”之类的内容?

我在 中没有找到这样的选项man read


注意:输入的是密码,因此我不想打印它或将其与已有的字符串进行比较。

答案1

有了bashshell,你总是可以做

FOO=a
BAR=b
prompt="Please enter value twice for validation"
while [[ "$FOO" != "$BAR" ]]; do
    echo -e $prompt
    read -s -p "Enter value: " FOO
    read -s -p "Retype to validate: " BAR
    prompt="\nUups, please try again"
done
unset -v BAR
# do whatever you need to do with FOO
unset -v FOO

read使用的选项:

  • -s静音模式。如果输入来自终端,则不会回显字符。
  • -p prompt在尝试读取任何输入之前,显示标准错误提示,不带尾随换行符。

答案2

您可以为此定义一个函数。

zshbash

blind_read_and_confirm() {
  # args: <prompt> <variable-name>
  local _confirm_
  until
    printf >&2 %s "$1"
    IFS= read -rs "${2-REPLY}" || return
    printf >&2 "\n%*s" "${#1}" 'and again: '
    IFS= read -rs _confirm_ || return
    eval '[ "${'"${2-REPLY}"'}" = "$_confirm_" ]'
  do
    printf >&2 "\nEntries differ, please try again.\n"
  done
  printf '\n'
}

例如用作

blind_read_and_confirm "Please choose a password: " password || exit

printf 'You entered a %s character password.\n' "${#password}"

请注意,如果没有IFS=and -r,如果用户输入" \/ery secret ""/ery secret"将存储在 中$password

相关内容