1

你能告诉我如何仅在这种格式 mm/dd/yy 时验证日期吗?我实际上找到了一个解决方案,但是当 mm-dd-yy 时它也返回 true。

当格式为 mm/dd/yy 时,我只需要它返回 true。

这是我的小提琴:http: //jsfiddle.net/naveennsit/Hk2tc/

alert(isDate("1/12/1234"));

function isDate(txtDate)

{

  var currVal = txtDate;

  if(currVal == '')

    return false;



  //Declare Regex 

  var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;

  var dtArray = currVal.match(rxDatePattern); // is format OK?



  if (dtArray == null)

     return false;



  //Checks for mm/dd/yyyy format.

  dtMonth = dtArray[1];

  dtDay= dtArray[3];

  dtYear = dtArray[5];



  if (dtMonth < 1 || dtMonth > 12)

      return false;

  else if (dtDay < 1 || dtDay> 31)

      return false;

  else if ((dtMonth==4 || dtMonth==6 || dtMonth==9 || dtMonth==11) && dtDay ==31)

      return false;

  else if (dtMonth == 2)

  {

     var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0));

     if (dtDay> 29 || (dtDay ==29 && !isleap))

          return false;

  }

  return true;

}
4

3 回答 3

1

你的问题是你的正则表达式......它也接受/字符。改成

 var rxDatePattern = /^(\d{1,2})(-)(\d{1,2})(-)(\d{4})$/;

然而,这个正则表达式也接受像 40-40-9999 这样的日期......当然,你没有第 40 个月的第 40 天;)

检查此链接以获取帮助 http://www.regular-expressions.info/dates.html

于 2013-10-11T06:18:01.773 回答
0

您的问题出在正则表达式中...

(\/|-)意思是“接受一个/或一个-字符”。

尝试更改此行:

var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;

对此:

var rxDatePattern = /^(\d{1,2})(\/)(\d{1,2})(\/)(\d{4})$/;

不同之处在于,两次出现的(\/|-)都被替换为(\/)仅匹配/的 。

于 2013-10-11T06:19:27.253 回答
0

您正在使用-. var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;你没有过滤-。检查这个更新 的小提琴

于 2013-10-11T06:19:48.333 回答