ここでは正規表現を一切スキップしないのはなぜですか?私はこれが方法より多くのコードであることを知っていますが、11月31日を指定する日付のように、正規表現ではできない日付のエラーを返します。
var datesToTest = [
"1991-12-01" // valid
, "1991-11-31" // invalid, Nov has 30 days
, "1991-13-01" // invalid, no 13th month
];
// Note: console.log() requires Firebug - switch to alert() if you wish
for (var i = 0; i < datesToTest.length; i++)
{
if (!isValidDate(datesToTest[i], '-'))
{
console.log(datesToTest[i] + ' is not a valid date!');
} else {
console.log(datesToTest[i] + ' is valid date!');
}
}
function isValidDate(dateAsString, delimiter)
{
var dateObject = new Date(dateAsString.replace(new RegExp(delimiter, 'g'), '/'));
var checkDate = [
dateObject.getFullYear()
, zeroFill(dateObject.getMonth() + 1, 2)
, zeroFill(dateObject.getDate(), 2)
].join(delimiter);
return (dateAsString == checkDate);
}
function zeroFill(number, width)
{
width -= number.toString().length;
if (width > 0)
{
return new Array(width + (/\./.test(number) ? 2 : 1)).join('0') + number;
}
return number;
}
これは、限り、あなたは= P
100 ADの前に日付を検証する必要がないよう、私はこの1つは右であるので、答えを追加する必要はありませんが、私は指摘します動作しますイアンのために、今のようにパターンはかなりリベラルです。たとえば、現在のパターンでは、 "1991-50-42"が有効な日付として渡されます。 – EBGreen
はい、マッチの各要素をチェックする審美的な理由から、他のコードが表示されませんでした。 –
ちょうど正規表現のパターンが少なくとも文字列*が日付である可能性があることを確認していないのはなぜですか? – EBGreen