0

範囲 ( で区切られた) を含むテキスト ボックス フィールドを検証する必要があります-。要件は次のとおりです。

  1. 年と月の範囲を検証し、次のような値0.5 - 3.11を示す必要があります5 months to 3 years and 11 months
  2. 小数点以下の桁数は最大 2 で、11 は小数点以下の最大値で、0 は最小です。
  3. ハイフンで区切られた両方の部分-には、1 つの空白スペースが含まれる場合と含まれない場合があります (ハイフンの前後のみ)。
  4. 左部分は常に右部分より小さくなければなりません。
  5. 次のような値を検証する必要があります。
    • 1
    • 2.3
    • 2.3 - 4.6
    • 2.3-4.6
    • 2.4-2.1無効です
  6. float 値に負数は不要

いくつかの正規表現を生成しようとしましたが、最も近いものは次のとおりです。

(0|([1-9][0-9]{0,9}))(\.[0-9]{1,2})?(-)(0|([1-9][0-9]{0,9}))(\.[0-9]{1,2})? 

ただし、次のような値のみを検証できますが1.3-1.9、左右の部分を比較することはできません。また、1 桁の値のみが検証されません。

4

2 に答える 2

0

解の正規表現を使用したさらに別のバリアント関数

function israngev(r){
    var res = r.match(/^\d+$|^\d+\.(\d|1[01])$|^(\d+\.(\d|1[01])) ?- ?(\d+\.(\d|1[01]))$/);
    return res!=null && 
          (!(res[1]||res[2]||res[4]) || 
            (res[1]!=null            ||
            (res[4]-res[2]>0)))}
于 2013-11-12T10:30:19.333 に答える
0

ほとんどの検証は正規表現で行うことができますが、最初の値が 2 番目の値より小さいことを確認するには、正規表現ではなくコードで行う必要があります。

function isRangeStringValid(r) {
    if (!r.match(/(0|[1-9]\d*)\.(\d|1[01]) ?- ?(0|[1-9]\d*)\.(\d|1[01])/)) {
        return false;
    }
    var y1 = parseInt(RegExp.$1);
    var m1 = parseInt(RegExp.$2);    
    var y2 = parseInt(RegExp.$3);    
    var m2 = parseInt(RegExp.$4);
    return (y1<y2 || (y1==y2 && m1<m2));
}
于 2013-11-12T08:06:39.083 に答える