2012-04-17 49 views
2

我有一个HTML表单字段,人们可以输入日期编码为这样:Javascript dd/mm/yyyy日期检查?

input type="text" name="dateofbirth" placeholder="dd/mm/yyyy" 

我试图找到一个JavaScript来检查日期是在dd/mm/yyyy格式(所以10个字符输入, 2/2/4)

任何意见,将不胜感激。只有第一次做JavaScript,并一直做得很好,直到这个呃逆。

编辑:代码(窗体名称是“注册)

// JavaScript Document 
function validateForm(signup) { 
    { 
    var x = document.forms["signup"]["dateofbirth"].value; 
    var reg = /(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d/; 
    if (x.match(reg)) { 
     return true; 
    } 
    else { 
     alert("Please enter dd/mm/yyyy"); 
     return false; 
    }   
    } 
} 
+6

我不意味着冒犯,但我不认为使用谷歌搜索脚本来使用计数作为“做JavaScript”:-)发布你尝试过的东西和你的HTML会给人们一个开始的地方。 – Pointy 2012-04-17 15:46:19

+1

有一百万种可能的方法 - 具体帮助! (有多少个可能的日期字段?在提交时或用户输入文本时进行验证?当它不是有效的输入时,行为是什么?) – Snuffleupagus 2012-04-17 15:50:10

+0

@Pointy:好吧,我只是一名学生,教科书不是有用,所以谷歌是第二选择。我几乎尝试了几乎所有不使用任何外部库,数组,php,.ASAP或jQuery等的脚本。我只能使用javascript。没有任何工作。 – silentauror 2012-04-17 15:52:50

回答

0

过目MDN guide for regular expressions。您将需要符合数字的字符类的信息 - 搜索“匹配数字字符”短语;以及指定匹配精确长度的方法 - 在本指南中搜索“匹配n个前面的字符出现次数”短语。

0

你看过Moment.js JavaScript库吗?

http://momentjs.com/

我还没有使用它,但我计划我的Javascript代码迁移到它。

+0

不幸地不能使用外部库。 – silentauror 2012-04-17 15:58:02

1

您可以使用正则表达式通过JavaScript验证您提供的格式的日期。示例代码如下所示。

function(input){ 
    var reg = /(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d/; 
    if (input.match(reg)) { 
    alert("Input matched"); 
    else { 
    alert("Please enter dd/mm/yyyy"); 
    } 
} 
+0

我相信这应该是工作,它看起来不错,但我用它,仍然不工作。太令人沮丧了。 – silentauror 2012-04-17 16:11:54

+0

你传递哪种类型的输入。我测试了你的模式 – irfanmcsd 2012-04-17 16:16:57

+0

注意的是,虽然这个表达式做出尝试,以确保有效的日期,它不会(尤其是周围的闰年)上http://gskinner.com/RegExr/及其工作正则表达式。鉴于此,为什么不去'/ \ d {1,2}/\ d {1,2}/\ d {4}'? – Phrogz 2012-04-17 16:20:15

1

最好的JavaScript最新的图书馆,我发现在http://code.google.com/p/datejs/

它也是文化的了解date.js,所以验证您的DD/MM/YYYY日期(我假设你是不是设在USA),使用Date.parse如下

var d1 = Date.parse("01/12/2004"); // returns a valid JavaScript date 
var d2 = Date.parse("30/02/2004"); // returns null 
+0

嗨。如果我可以使用外部库,这将是非常好的,我不能用于这个项目。 – silentauror 2012-04-17 16:20:20

+0

@silentauror ....所以也许看看图书馆内部,看看它是如何做到的? – Matt 2012-04-17 16:33:59

+0

@Matt好主意:)我会看看它 – silentauror 2012-04-17 16:39:18

0

你有没有在你的网页浏览器,以确保没有JS语法或运行时错误的错误控制台看上去被提出?你附加到你的问题的JavaScript代码是 无效 令人惊讶(你有一个额外的{}包装你的功能正文)。提示:使用正则表达式测试字符串的有效性时,为了简化和性能以及自记录,您应该使用if (regex.test(str))而不是if (str.match(regex))

考虑你的要求,我会做到这一点:

function isDDMMYYYY(str){ 
    return /^\d{2}/\d{2}/\d{4}$/.test(str); 
} 

不过,我会亲自更改的要求,以允许用户输入一个数字的日和月:

return /^\d{1,2}/\d{1,2}/\d{4}$/.test(str); 
+0

对不起,我真的很新手到JavaScript的...这里我会实现这个: 回报/^\d{2}/\d{2}/\d{4}$/.test(str); ?? – silentauror 2012-04-17 16:37:47

+0

@silentauror如果你不想像我做的那样把它包装起来(在第一个代码示例中;第二个只是我不重复自己),那么你可以使用'var isValidLookingDate = /.../.test (str);' – Phrogz 2012-04-17 16:46:19

+0

是这样的? var x = document.forms [“signup”] [“dateofbirth”]。value; \t VAR的isValid = /^\d{1,2}/\d{1,2}/\d{4}$/.test(x); \t if(isvalid.match(x)){ return true; } 其他{ 警报( “请输入日/月/年”); 返回false; }' 得到一个语法错误,它不工作..现在我只是混淆了我自己。这太令人沮丧了。 (ps。无法在评论中获得空格,但它的空格和缩进格式正确) – silentauror 2012-04-17 16:52:36