2017-03-05 1 views
0

長さ> 8、少なくとも1桁、少なくとも1つ、[@、#、$のいずれかの規則でユーザー入力を検証するbashスクリプトを作成しようとしています。 ]regex bashによるユーザーパスワードの検証

だから、そのために正規表現がこれです:私はこれを試してみた

((?=.*\d)(?=.*[@#$%&*+-=]).{8,}) 

、ない結果:$1された入力パラメータを指定して

result=$(echo $1 | egrep "((?=.*\d)(?=.*[@#$%&*+-=]).{8,})") 
echo $result 

。また、私はIF句でそれをラップしたいと思いますが、echoは何も出力しません。何が間違っているのですか?

+0

があなたの代わりにegrep' 'のPerlのサポートのために' grepのの-P'を使用する必要があります。また、条件を満たしていない正規表現をチェックしてください。 – SLePort

答えて

2

これは役立つかもしれない:

[[ ${#1} -ge 8 && $1 =~ [0-9] && $1 =~ [@#$] ]] && result="$1" 

または3つのgrepで:

result=$(grep -E '.{8}' <<< "$1" | grep '[0-9]' | grep '[@#$]') 
関連する問題