5

私はこのコードを持っています:

<form name="test">
    <input type="text" ng-model="code" name="code" ng-pattern="/^code_[0-9]+$/"/>
    <div ng-show="test.code.$dirty && test.code.$invalid">
        Error:
        <span ng-show="test.code.$error.pattern">Pattern fail.</span>
    </div>
</form>

このコードには 2 つの問題があります。

  1. 「 code_232 」、「 code_232 」 「 code_232 」などの文字列は検証に合格します。私は正規表現の専門家ではないので、これは単に私が書いた正規表現に関連する問題かもしれません:/^code_[0-9]+$/

  2. 「code_23892」(正しい文字列) を書き始めると、まだ書き込んでいる間にエラー メッセージが表示されます ( test.code.$error.pattern = true)。これを回避する組み込みの方法はありますか?したがって、私の望ましい動作は次のとおりです。

「cod」と書き、入力にまだフォーカスがある場合: エラーなし

「cod」と書いて入力がフォーカスを失った場合:エラー。

「a」、「ca」、「coa」などと書くと、エラーになります。これは、パターンが既に違反されているためです。

これはすでに可能ですか、それともこれを達成するためにカスタム検証ディレクティブを作成しましたか?

前もって感謝します。

4

1 に答える 1

9

空白が失敗した検証をトリガーしない理由は、ng-model が自動的に値をトリミングするためです。それを望まない場合は、 に追加できng-trim="false"ます<input />。ng-trim はまったく新しい属性であるため、Angular のバージョンを更新する必要がある場合があることに注意してください。

2 番目の質問について。入力中に検証が実行されるのを避けることはできないと思いますが、入力がフォーカスを失ったときにのみエラーを表示するようにコードを変更できます。ng-blurやのようなものは存在しないと思いますng-focusが、それらを実装するのはかなり簡単なはずです。

于 2013-02-21T15:29:58.427 に答える