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]match[1]在上面。

于 2012-04-15T13:15:26.873 回答