2012-09-13 80 views
0

我有3个文本框像下面两位数的月份日期验证

<input type="text" name="birth_year" id="birth_year" maxLength="4" size="4">Year 
<input type="text" name="birth_month" id="birth_month" maxLength="2" size="2">Month 
<input type="text" name="birth_day" id="birth_day" maxLength="2" size="2">Day 

[2012] Year [09] Month [13] Day 

我如何可以验证该日JQ?

我一直在寻找它两天。

虽然我找不到像这个XXXX-XX-XX格式的东西。

我发现this jsFiddle但是这一次不验证两位数一个月或一天是03或22

任何帮助,将不胜感激

+2

你不需要jQuery来执行良好的ol时尚的javascript验证。读取字符串值并将其解析为整数。检查它是否在预期的值范围内。如果没有什么不合适的地方,它是有效的。 – Neil

+0

您是否验证用户输入了“01”而不仅仅是“1” - 如果是这样,您最好填充该值。如果您需要验证“01”或“1”是否有效,@Neil解析该值是正确的。 'var monthValue = parseInt(month,10);' – Fenton

+0

你需要检查它是一个实际的日期,还是只是数字在范围内?例如,2012年2月29日生效,2013年2月29日生效? – andi

回答

0

这实际上是非常简单的:

var year = document.getElementsByName("birth_year")[0].value, 
    month = document.getElementsByName("birth_month")[0].value, 
    day = document.getElementsByName("birth_day")[0].value, 
    date = new Date(year + "-" + month + "-" + day); 

if (isNaN(date.getTime())) { 
    // The date is invalid 
} 

不幸,这在IE8之类的旧版浏览器中不起作用,因为它们不接受yyyy-mm-dd日期格式。但是你可以重写这样的日期:(我觉得格式mm/dd/yyyy的是没有意义的,但是呢......这是Java脚本,因为它的第一个定义是如何工作的)

var date = new Date(month + "/" + day + "/" + year); 

+0

让我试试看。无论如何,非常感谢你!真的很感激它! –

+0

如果它适合你,你可以接受答案(如果你喜欢它,可以赞成)。 – MaxArt

0

更好的验证(请参阅working example)。如果你要问生日,为什么不检查它们是否也是可信的?第一部分检查无效日期(超出范围,包括该月特定范围之外的日期);第二部分将那些还未出生的人,或者太老的人看作是合理的。

/** 
* input is year/month/day (month from 1 to 12, day from 1 to 31) 
* output is boolean: true if correct and in-range, false if not 
*/ 
function isValidBirthdate(year, month, day, minAge, maxAge) { 
    // javascript days expect zero-based days and months 
    month --; day --; 
    var saysWasBorn = new Date(year, month, day); 
    if (saysWasBorn.getDate() != day 
    || saysWasBorn.getMonth() != month 
    || saysWasBorn.getFullYear() != year) { 
     console.log("impossible date: ");  
     return false; 
    } 
    var now = new Date(); 
    var yearsOld = now.getFullYear() - saysWasBorn.getFullYear(); 
    if ((now.getMonth()*40 + now.getDate() - 1) < 
     (saysWasBorn.getMonth()*40 + saysWasBorn.getDate())) { 
    yearsOld --;     
    } 
    if (yearsOld > maxAge) { 
    console.log("too old");   
    return false; 
    } else if (yearsOld < minAge) { 
    console.log("too young"); 
    return false; 
    } 
    return true; 
} 
+0

我觉得有趣的部分在第一个if后结束,其余的都是未经检查的检查。而'日期'对象不会**期望为零的日子,只有几个月。 – MaxArt

+0

非常感谢您的关注和帮助。我不只是要复制和粘贴它。我是新手,但试图通过根据需要改变来理解并重用它。再次感谢! :) –