2011-03-31 110 views
0

我需要帮助。这是我的html代码:Javascript表单验证程序日期

<tr> 
    <div align="left">Please Enter Date: 
    <td><div align="left" class="style66">(E.g: 8-Feb-11)<br><input name="userdateinp" type="text" size="20" id="userdateinp"/></div></td> 
    </tr> 

当我点击提交按钮..和用户输入错误的日期,如:11年8月2日或二月-8-11脚本必须说,用户输入的错误的日期格式。怎么做?我看到的只是纯数字教程。那么说FEB,MAR,APR等的月份如何:)

我从网上得到了这段代码。

Javascript代码:

<script language = "Javascript"> 
/** 
* DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/) 
*/ 
// Declaring valid date character, minimum year and maximum year 
var dtCh= "/"; 
var minYear=1900; 
var maxYear=2100; 

function isInteger(s){ 
    var i; 
    for (i = 0; i < s.length; i++){ 
     // Check that current character is number. 
     var c = s.charAt(i); 
     if (((c < "0") || (c > "9"))) return false; 
    } 
    // All characters are numbers. 
    return true; 
} 

function stripCharsInBag(s, bag){ 
    var i; 
    var returnString = ""; 
    // Search through string's characters one by one. 
    // If character is not in bag, append to returnString. 
    for (i = 0; i < s.length; i++){ 
     var c = s.charAt(i); 
     if (bag.indexOf(c) == -1) returnString += c; 
    } 
    return returnString; 
} 

function daysInFebruary (year){ 
    // February has 29 days in any year evenly divisible by four, 
    // EXCEPT for centurial years which are not also divisible by 400. 
    return (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28); 
} 
function DaysArray(n) { 
    for (var i = 1; i <= n; i++) { 
     this[i] = 31 
     if (i==4 || i==6 || i==9 || i==11) {this[i] = 30} 
     if (i==2) {this[i] = 29} 
    } 
    return this 
} 

function isDate(dtStr){ 
    var daysInMonth = DaysArray(12) 
    var pos1=dtStr.indexOf(dtCh) 
    var pos2=dtStr.indexOf(dtCh,pos1+1) 
    var strMonth=dtStr.substring(0,pos1) 
    var strDay=dtStr.substring(pos1+1,pos2) 
    var strYear=dtStr.substring(pos2+1) 
    strYr=strYear 
    if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1) 
    if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1) 
    for (var i = 1; i <= 3; i++) { 
     if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1) 
    } 
    month=parseInt(strMonth) 
    day=parseInt(strDay) 
    year=parseInt(strYr) 
    if (pos1==-1 || pos2==-1){ 
     alert("The date format should be : mm/dd/yyyy") 
     return false 
    } 
    if (strMonth.length<1 || month<1 || month>12){ 
     alert("Please enter a valid month") 
     return false 
    } 
    if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){ 
     alert("Please enter a valid day") 
     return false 
    } 
    if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){ 
     alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear) 
     return false 
    } 
    if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){ 
     alert("Please enter a valid date") 
     return false 
    } 
return true 
} 

function ValidateForm(){ 
    var dt=document.frmSample.txtDate 
    if (isDate(dt.value)==false){ 
     dt.focus() 
     return false 
    } 
    return true 
} 

</script> 

那么这里的HTML代码:

<form name="frmSample" method="post" action="" onSubmit="return ValidateForm()"> 
       <p>Enter a Date <font color="#CC0000"><b>(mm/dd/yyyy)</b></font> 
        : 
        <input type="text" name="txtDate" maxlength="10" size="15"> 
       </p> 
       <p> 
        <input type="submit" name="Submit" value="Submit"> 
       </p> 
       </form> 

如何修改它,使其.. 08 - 2月11? :)

+0

代码在哪里? – Slappy 2011-03-31 02:18:07

+0

这是代码。 :) *以上* – catsgirl008 2011-03-31 05:18:15

回答

1

如果您更改设置为始终为2个字符的日期,即08年2月11日而不是11年2月8日,则可以使用正则表达式检查4-6个“令牌”以查看它们是否为字母。

是否有任何特殊的原因让您输入日期格式?

它可能更容易使用更常见的格式,然后只是让你的JavaScript转换它。

否则,为了简单起见,如果这是您必须具备的格式,您最好的选择可能是做3个下拉菜单,然后您可以使用php以任意格式将三个结果合并为一个字符串。

+0

或使用其中一个已建成的日历下拉菜单,以便他们选择特定的日期。 – Dave 2011-03-31 02:19:12

+0

嗨Eli,有人告诉我,我应该使用格式08年2月11日或3月17日。 :(我不知道如何开始,我看到一个代码,但我不知道如何编辑它.. – catsgirl008 2011-03-31 02:21:28

1

由于所有格式,日期都很棘手。您是否希望用户使用单一格式或多种格式并不十分清楚。然而,如果您的需求更复杂,Date.js库在日期周围有一些很棒的功能。

http://www.datejs.com/

还要考虑使用它连同日期选择器如jQuery UI:

http://jqueryui.com/demos/datepicker/

不过切记,如果一个文本框,让用户输入您必须假定用户将进入垃圾在里面。 Datepickers不会阻止这一点。

+0

是的,这就是为什么他们要求我做一些验证,会说“你输入的格式是错误的”。验证用户输入的时间与我系统中的当前时间相同如何做到这一点? – catsgirl008 2011-03-31 05:19:41

+0

我正在使用http://jqueryui.com/demos/datepicker/,它有用并减少我的工作。你应该使用jquery datepicker而不是编写和修复代码 – saturngod 2011-03-31 05:20:50

+0

嗨,我很乐意使用它,但我不允许这样做,因为他们已经指示我使用他们想要的格式。:((((( – catsgirl008 2011-03-31 05:44:20