0

次の形式でプリミティブ生年月日フィールド入力を検証する必要があります。

「うーん」

文字列の最初の 3 文字は、許容される月の 3 文字の省略形でなければなりません。 jan、feb、marなどを綴る限り、小文字、大文字、または任意の組み合わせにすることができます。 この特定の形式の準備ができている配列を持つ組み込みメソッドはありません。ユーザー入力と比較できる月。localeCompare()forループでメソッドを使用して、出力が0でないかどうかをテストし、それに応じてエラーメッセージを追加できると考えていました。

4

4 に答える 4

1
function dateTester() {
   var d = new Date(),
      i,
      mo = [],
      moIsValid;
   for (i = 0; i < 12; i += 1) {
      d.setMonth(i);
      mo.push(d.toLocaleString().split(' ')[1].substr(0, 3));
   }
   return new RegExp('^(' + mo.join('|') + ')', 'i');
}

var moIsValid = dateTester();
alert(moIsValid.test('fEb1992'));

その日のユーザーの現在のロケール名を有効にしたくない場合は、に切り替えtoLocaleString()toString()ください。しかし、代わりにこれをやってみませんか:

var moIsValid = /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i;
alert(moIsValid.test('fEb1992'));
于 2012-08-07T23:42:43.007 に答える
0

「動的」テストで1か月を本当にチェックしたい場合を除いて、次のことができます。

var months = 'jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec';

months.indexOf('JaN1975'.toLowerCase().substring(0,3)

確認方法:

console.log(months.indexOf('JaN1975'.toLowerCase().substring(0,3)) != -1);
console.log(months.indexOf('oct1975'.toLowerCase().substring(0,3)) != -1);
console.log(months.indexOf('FEB1975'.toLowerCase().substring(0,3)) != -1);
console.log(months.indexOf('Ja1975'.toLowerCase().substring(0,3)) != -1);
console.log(months.indexOf('091975'.toLowerCase().substring(0,3)) != -1);

http://jsfiddle.net/ELMFu/

与える:

true
true
true
false
false
于 2012-08-07T23:34:34.410 に答える
0

入力を検証するためのこの簡潔な関数が気に入っています。

var months = "janfebmaraprmayjunjulaugsepoctnovdec";
function validate(dateString) {
    return dateString.length == 7 &&
           !(months.indexOf(dateString.substr(0,3).toLowerCase()) % 3) &&
           isFinite(dateString.substr(3));
}

http://jsfiddle.net/gilly3/NR3aG/

于 2012-08-07T23:51:01.920 に答える