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 の正規表現が適しています。変数に配置できると思いますが、変更する必要があるかもしれません

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