私は現在、サードパーティのJSライブラリを持つことができないプロジェクトに取り組んでいます(そうでなければ、これはjQueryで簡単になります)。このプロジェクトの内容の1つは、フォームの検証です。正規表現に関するいくつかの小さな問題を除いて、それはかなりうまく機能しています。
テキストフィールドの検証関数onchange()をトリガーしているので、タブアウトしてエラーが発生した場合はすぐにわかります。良いデータをタブアウトすると、すぐにわかります。検証が失敗した場合は、エラークラスを親要素に割り当てます。これは、検証を1回だけトリップする場合に正常に機能します。テストに失敗し続けると、エラークラスが蓄積されます。たとえば、検証を2回失敗すると、次のようになります。
<p class=" error">
3回失敗すると、次のようになります。
<p class=" error error">
検証に合格したら、以下のremoveClass()関数を呼び出します。基本的に、グローバル検索/置換を取得しているようには見えません。グローバル修飾子を追加すると上記のケースが処理されると確信していましたが、そうではなく、1つの「エラー」クラスのみが削除されます。
removeClass: function (el, name) {
var regex = new RegExp('(^|\\s)' + name + '(\\s|$)', 'gi');
el.className = el.className.replace(regex, ' ');
}
私の正規表現は、行の先頭または空白、「エラー」、空白または行の終わりを探しています。確かに、私は確かに正規表現を吸います:)
何か飛び出しますか?