0

日付が有効かどうかをチェックする次のコードがあります。http://jsfiddle.net/uzSU6/36/

日付部分、月部分、または年部分に空白がある場合、日付は無効と見なされます。このため、現在、操作前後の文字列の長さを確認していtrimます。正常に動作します。しかし、空白をチェックするためのより良い方法はありますか?(たとえば、===演算子を使用)

function isValidDate(s) 
{
var bits = s.split('/');

//Javascript month starts at zero
var d = new Date(bits[2], bits[0] - 1, bits[1]);


if ( isNaN( Number(bits[2]) ) ) 
{
    //Year is not valid number
    return false;
}

if ( Number(bits[2]) < 1 ) 
{
    //Year should be greater than zero
    return false;
}


//If there is unwanted blank space, return false
if  ( ( bits[2].length != $.trim(bits[2]).length ) ||
      ( bits[1].length != $.trim(bits[1]).length ) ||
      ( bits[0].length != $.trim(bits[0]).length ) )
{
    return false;
}



//1. Check whether the year is a Number
//2. Check whether the date parts are eqaul to original date components
//3. Check whether d is valid

return d && ( (d.getMonth() + 1) == bits[0]) && (d.getDate() == Number(bits[1]) );

} 
4

3 に答える 3

6

文字列にスペースがある場合は、indexOf()関数を使用できdateます。

if(s.indexOf(' ') != -1)
{
    //space exists
}
于 2012-12-17T09:22:07.717 に答える
1

次のような空白をテストできます

 if( /\s/g.test(s) )

空白をテストします。

于 2012-12-17T09:25:25.033 に答える
0

文字列の有効性をテストするために正規表現の使用を検討することをお勧めします。

function isValidDate(s) {
    var re = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
    var mdy = s.match(re);
    if (!mdy) {
        return false;   // string syntax invalid;
    }

    var d = new Date(mdy[3], mdy[1] - 1, mdy[2]);
    return (d.getFullYear() == mdy[3]) &&
           (d.getMonth() == mdy[1] - 1) &&
           (d.getDate() == mdy[2]);
}

正規表現は、これらすべてを一度に実行します。

  • スラッシュで区切られた3つのフィールドがあることを確認します
  • フィールドが数字である必要があります
  • 日と月を1桁または2桁にすることができますが、年には4桁が必要です
  • 文字列内の他の何も合法でないことを保証します

http://jsfiddle.net/alnitak/pk4wU/を参照してください

于 2012-12-17T09:25:18.450 に答える