2010-02-16 5 views
1

J'ai une application Web, dans ce je dois valider un champ de date de format comme mm/jj/aaaa. J'ai cherché dans le filet mais je n'ai pas eu le bon. Aidez-moi s'il vous plaît en fournissant la nouvelle fonction ou en corrigeant sur mon code. Mon code est illustré ci-dessous .. Je l'avais appelé cette fonction JS à onblur événement ..Validation pour la date

function isValidDate() { 

var re = new RegExp('^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)dd$'); 

if (form1.txtDateOfOccurance.value != '' && !form1.txtDateOfOccurance.value.match(re)) { 
    alert("Invalid date format: " + form1.txtDateOfOccurance.value); 
    form1.txtDateOfOccurance.value = ""; 
    form1.txtDateOfOccurance.focus(); 
    isEnable(); 
    return false; 
} 

}

Merci à l'avance ..

Répondre

0

Je voudrais simplement essayer analyse de la chaîne comme un objet Date et le résultat (en supposant que vous avez seulement besoin de savoir si elle est une date valide ou non):

var myDate = Date.parse(form1.txtDateOfOccurance.value); 
if(isNaN(myDate)){ 
    // it's not a real date 
} 
+3

Pas bon. Le fait qu'une chaîne génère une date valide ne signifie pas que cette date était valide pour commencer. par exemple. 2011/2/31 serait appelé une date invalide, mais lorsqu'il est ajouté à 'new Date()' il est donné le 3 mars 2011. Les chaînes de date non valides peuvent donc générer des objets date valides. – RobG

2

Jetez un oeil à http://www.smartwebby.com/DHTML/date_validation.asp, premier résultat de recherche lorsque googler pour « javascript validation de la date » ..

+1

ce code est un gros tas de * merde * excuse mon français. peut être écrit la moitié de la taille sinon moins. – vsync

0
function IsValidDate(str) { 
    var str2=""; 
    var date = new Date(str); 
    str2 = (date.getMonth()+1) + "/" 
       + date.getDay() + "/" 
       + (date.getYear()+1900); 

    return (str == str2); 
} 
1

Voici la regex que vous voulez.


var re = /^(0[1-9]|1[0-2])\/(0[1-9]|[1-3]\d)\/((19|20)\d\d)$/ 

Bien que vous êtes probablement mieux, comme inkedmn suggère la validation par l'analyse de l'entrée, puisque MM/jj/aaaa est un format de date reconnue par Date.parse.

+0

Juste étant anal: 'var re =/^ (0 [1-9] | 1 [0-2]) \/(0 [1-9] | [1-2] \ d | 3 [0-1]) \/((19 | 20) \ d \ d) $/'. Le vôtre accepterait le 1/39/2011 comme date. – danyim

0

Vous pouvez utiliser:

function checkdate(input){ 
var validformat=/^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity 
var returnval=false; 
if (!validformat.test(input.value)) 
alert("Invalid Date Format. Please correct and submit again."); 
else{ //Detailed check for valid date ranges 
var monthfield=input.value.split("/")[0]; 
var dayfield=input.value.split("/")[1]; 
var yearfield=input.value.split("/")[2]; 
var dayobj = new Date(yearfield, monthfield-1, dayfield); 
if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield)) 
alert("Invalid Day, Month, or Year range detected. Please correct and submit again."); 
else 
returnval=true; 
} 
if (returnval==false) input.select() 
return returnval; 
} 
0

Ceci est ma mise en œuvre. Il vérifie une plage valide et tout.

function validateDate(g) { 
    var reg = new RegExp("^(([0-9]{2}|[0-9])/){2}[0-9]{4}$"); 
    // Checks if it fits the pattern of ##/##/#### regardless of number 
    if (!reg.test(g)) return false; 
    // Splits the date into month, day, and year using/as the delimiter 
    var spl = g.split("/"); 
    // Check the month range 
    if (parseInt(spl[0]) < 1 || parseInt(spl[0]) > 12) return false; 
    // Check the day range 
    if (parseInt(spl[1]) < 1 || parseInt(spl[1]) > 31) return false; 
    // Check the year range.. sorry we're only spanning ten centuries! 
    if (parseInt(spl[2]) < 1800 || parseInt(spl[2]) > 2800) return false; 
    // Everything checks out if the code reached this point 
    return true; 
}