2016-09-02 13 views
2

私は、ユーザが数値演算子で数値フィールドを入力できるテキストフィールドを持っています。以下は、有効な入力のための一連の例です。複数の正規表現を使用した入力検証

1. > 3 
2. >= 3 
3. < 3 
4. <= 3 
5. <> 3 (NOT) 
6. 3 to 5 (RANGE) 
7. <> 3 to 5 (NOT RANGE) 

私は以下のロジックを使用しています。私はそれぞれregexkeyupに反復します。私はこれを行うよりエレガントでより良い方法があることを知りたいですか?

var regex = /^(>=\d+|<=\d+|>\d+|<\d+|\d+|<> \d+|<> \d+ to \d+|\d+ to \d+)$/; 
var isValid = regex.test(x); 

答えて

0

あなたはbackgroundプロパティのスタイルをcss:invalidを使用し、<input>要素でpattern属性の値としてRegExpを設定することができます:あなたは1にそれらを組み合わせて、あなたの正規表現で(|)を使用するか、でき

function myFunction() { 
    var x, text; 

    // Get the value of the input field with id="numb" 
    x = document.getElementById("numb").value; 
    var arrRegex = new Array("^>=\\d+$", "^<=\\d+$", "^>\\d+$", "^<\\d+$", "^\\d+$", "^<> \\d+$", "^<> \\d+ to \\d+$", "^\\d+ to \\d+$"); 
    c = false; 
    for (i = 0; i < arrRegex.length; i++) { 
     var regex = new RegExp(arrRegex[i]); 
     if (regex.test(x)) { 
      c = true; 
     } 
    } 
    if (c == true) { 
     document.getElementById("numb").style.backgroundColor = "green"; 

    } else { 
     document.getElementById("numb").style.backgroundColor = "red"; 

    } 
} 
+0

入力がない場合のデフォルトは緑で、これは望ましくありません。 – skeptic01

+0

@ skeptic01更新された記事を参照してください。入力を処理しないために 'required'属性を追加しました。デフォルトで 'background'は何も入力せずに設定すべきですか? – guest271314

+0

入力がない背景はありません。 – skeptic01

0

要素の;私ならば、他の要素css.value.length === 0または:not(:focus)unset !importantbackgroundを設定し、唯一css:valid:invalidスタイル

input:invalid { 
 
    background: red; 
 
} 
 
input:valid { 
 
    background: green; 
 
} 
 
input:not(:focus), .clear { 
 
    background: unset !important; 
 
}
<input pattern="^(|>=\d+$|<=\d+$|>\d+$|<\d+$|\d+$|<> \d+$|<> \d+ to \d+$|\d+ to \d+)$"> 
 

 
<script> 
 
    var input = document.querySelector("input[pattern]") 
 
    input.onfocus = input.oninput = function() { 
 
    this.classList.toggle("clear", this.value.length === 0) 
 
    } 
 
</script>

+0

を適用するclassNameを削除するには、パフォーマンスと異なる場合、inputの要素でfocusイベントをclassNameを切り替えます反復vsは|で区切られた複数の正規表現を持つ? – skeptic01

+0

私には分かりません。 JavaScriptエンジンに応じて異なるかもしれませんが、私の感心は少し上手くいくでしょう。 – Jacob

関連する問題