2016-09-09 9 views
0

少なくとも1つの数字、少なくとも1つの大文字、少なくとも1つの小文字、オプションの記号#&を含むキーボードからのパスワードを受け入れる必要があります。それは常にタイムアウトが、パスワードを検出していません...誰もがパスワードプロンプトを使用して動作しないことを確認する

package require Expect 
log_user 0 
send "Enter Password\n" 
expect { 
-re {(?=.*?[0-9])(?=.*?[a-z])(?=.*?[A-Z])[a-zA-Z0-9#&-]*} {send "Password ok"} 
    timeout { send "Time out" } 
    } 

私は、コードを編集していたとパスワードは最初の試みで、正しい形式で指定されている場合にのみ、今、それが働いている...もしを助けることができます間違ったフォーマットが最初の試行で与えられ、期待は次の試行を待つでしょう。しかし、次のエントリが正しい場合であっても、Expectはそれを検出せずに次の試行に行き、最後にタイムアウトになります

+0

あなたはおそらく 'send_user'と' expect_user'を探しています –

答えて

0

許容されないパスワードと一致する別のルールが必要です他のルールと一致します)、メッセージを印刷して、再び待機します。これの鍵はexp_continueです。

send "Enter Password\n" 
expect { 
    -re {(?=.*?[0-9])(?=.*?[a-z])(?=.*?[A-Z])([a-zA-Z0-9#&-]*)[\r\n]+} { 
     send "Password ok" 
     # Save the password for later... 
     set thePassword $expect_out(1,string) 
    } 
    -re {[\r\n]+} { 
     send "That looks like a bad password. Try again please.\n" 
     exp_continue 
    } 
    timeout { 
     send "Time out" 
    } 
} 

exp_continueコマンドは、「keep on expecting;我々はまだ完了していません」複雑な対話を扱うためにはバイタルが重要です。また、私は行末にマッチを固定し、パスワードを簡単に抽出できるように( ... )を追加しました。

関連する問題