0

JavaScriptを使用して誕生日の検証フォームを作成していますが、正しく機能しません。たとえば、40/40/2012は無効ですが、アラートは表示されません。

JavaScript

function onFormSubmit(form_element) {

    var birthday = form_element.birthday.value;
    if ( !/\d{2}\/\d{2}\/\d{4}/.test(form_element.birthday.value) )
    {
        alert("This field is required. Please enter date mm/dd/yyyy!");
        return false;
    }
    return true;
}

HTML

<form onsubmit="return onFormSubmit(this)">
    Birthday:<input type="text" name="birthday" /><br />
    <input type="submit" value="submit" />
</form>
4

1 に答える 1

2

私がやりたいのはこれです:

var birthday = form_element.birthday.value;
var match = /^(\d\d)\/(\d\d)\/(\d\d\d\d)$/.exec(birthday);
if (!match || match.length < 4) return false;

var d = new Date(match[3] - 0, (match[2] - 0) - 1, match[1] - 0);
if (d.getFullYear() != match[3] || d.getMonth() + 1 != match[2] || d.getDate() != match[1])
  return false;

return true;

有効な年/月/日から日付を作成し、Date オブジェクトでそれらの値を確認すると、同じ値が返されるはずです。そうしないと、Date オブジェクトが偽の値を調整して有効な日付を表したということになります。

編集— 申し訳ありませんが、私のコードは日/月/年で書かれています。月/日/年が必要な場合は、上記でmatch[2]andmatch[1]を入れ替えます。

于 2012-04-15T13:15:26.873 に答える