3

ユーザー入力が必要な ant スクリプトがあります。ユーザーが正しい入力タイプを入力したことを確認し、そうでない場合は、正しいものを入力するように求めます。

<input message="secure-input:" addproperty="the.password" >
</input>

入力が空白かどうかを確認する必要があります。その後、再入力するように求めます。

アリ入力タスクで可能ですか?

4

3 に答える 3

4

ほとんどの条件節では、条件が満たされない場合、せいぜいスクリプトを失敗させることができます。ユーザーからいくつかの入力を収集していると想像しているので、ユーザーが空のパスワードを入力した場合に失敗すると、すべてをもう一度入力する必要があるため、使い勝手が良くない可能性があります...

さらに、空の文字列をテストするだけでは検証が不十分に思えますが、ユーザーが大量のスペースを送信した場合はどうなりますか?

私の(確かにハックっぽい)提案は次のとおりです:

<target name="askPassword">
    <local name="passwordToValidate"/>
    <input message="secure-input:" addproperty="passwordToValidate"/>

    <script language="javascript">
        <![CDATA[   
            passwordToValidate = project.getProperty("passwordToValidate");

            //You can add more validations here...
            if(passwordToValidate.isEmpty()){
                println("The password cannot be empty.");
                project.executeTarget('askPassword');
            }
        ]]>
    </script>   

    <property name="the.password" value="${passwordToValidate}"/>       
</target>

したがって、ハイライト:

  1. ローカルタスクを使用して、「passwordToValidate」プロパティのローカルスコープを設定します(antスクリプトにプロパティを設定すると、ほとんどのタスクで書き換えができないため、再帰が問題になることに注意してください)。
  2. スクリプトを使用して入力をテストします(おそらくさらに検証を追加します)
  3. テストが失敗した場合は、ターゲットを再度呼び出します
  4. テストが成功した場合は、ローカルスコープのプロパティをグローバルスコープのプロパティに割り当てます

私の2セント。

于 2013-03-14T17:48:55.030 に答える
1

条件タスクを使用して入力が空でないかどうかを確認できますが、antcontrib を使用して if/else を追加し、ユーザーに適切なメッセージを表示することもできます。

<if>
    <not>
        <length string="${the.password}" trim="true" when="greater" length="0" />
    </not>
</if>
<then>
    <echo>Your password is empty!</echo>
</then>
于 2013-03-14T13:25:46.323 に答える
0

条件-conditionタスクを見てください。

于 2013-03-14T13:07:00.243 に答える