2

我制作了一个辅助函数来确定生成密码的指定长度是否有效。如果有条件地将其翻译为正则表达式以检查 8-64 的范围,我该如何翻译?

# Check to see if password length is valid
# @param $1 length specified by the user
# @return True (0) if not valid, False (1) if we're okay
# Usage: if is_valid "$length"
is_valid() {
  local length="$1"

  if (( "$length" < 8 || "$length" > 64 )); then
    return 0
  else
    return 1
  fi  
}
4

2 回答 2

2

您可以使用普通模式匹配而不是正则表达式:

function is_valid () {
    [[ $1 == @([8-9]|[1-5][0-9]|[6][0-4]) ]]
}

正则表达式将是类似的:

function is_valid () {
    [[ $1 =~ ^([8-9]|[1-5][0-9]|[6][0-4])$ ]]
}

我没有发现其中任何一个比普通的更具可读性

function is_valid () {
    (( 8 <= $1 && $1 <= 64 ))
}

请注意ifreturn不是必需的。

于 2013-08-01T00:17:50.487 回答
1

利用

local length=${#1}
if [ $length -lt 8 ] || [ $length -gt 64 ]; then 

而不是接受长度作为参数。这样您就可以计算密码的长度,而无需用户提供额外的输入。但是如果你真的想用 RegEx,HamZa 的 regex 是对的。我相信它可以放入变量中,但您可能需要将其更改为

"^.{8,64}\$" 
于 2013-08-01T00:13:57.103 回答