Heim > Artikel > Web-Frontend > Warum kann der JavaScript-Datumsvalidierungscode das Format „mm/tt/jjjj“ nicht korrekt validieren?
Herausforderung:
Sie möchten das Format validieren einer Datumseingabezeichenfolge als „mm/tt/jjjj“. Ein vorhandener Codeausschnitt, den Sie versucht haben, konnte diese Aufgabe jedoch nicht effektiv ausführen.
Frage:
Was könnte das zugrunde liegende Problem im bereitgestellten Datumsvalidierungscode sein?
Erklärung:
Der angegebene Code zielt darauf ab, Datumszeichenfolgen im Format „mm/tt/jjjj“ zu validieren. Allerdings kann es zu Fehlern oder Inkonsistenzen im Code kommen, die eine ordnungsgemäße Funktion verhindern. Lassen Sie uns den Code untersuchen und potenzielle Probleme identifizieren:
<code class="js">function isDate(ExpiryDate) { var objDate, // date object initialized from the ExpiryDate string mSeconds, // ExpiryDate in milliseconds day, // day month, // month year; // year // date length should be 10 characters (no more no less) if (ExpiryDate.length !== 10) { return false; } // third and sixth character should be '/' if (ExpiryDate.substring(2, 3) !== '/' || ExpiryDate.substring(5, 6) !== '/') { return false; } // extract month, day and year from the ExpiryDate (expected format is mm/dd/yyyy) // subtraction will cast variables to integer implicitly (needed // for !== comparing) month = ExpiryDate.substring(0, 2) - 1; // because months in JS start from 0 day = ExpiryDate.substring(3, 5) - 0; year = ExpiryDate.substring(6, 10) - 0; // test year range if (year < 1000 || year > 3000) { return false; } // convert ExpiryDate to milliseconds mSeconds = new Date(year, month, day).getTime(); // initialize Date() object from calculated milliseconds objDate = new Date(); objDate.setTime(mSeconds); // compare input date and parts from Date() object // if difference exists then date isn't valid if ( objDate.getFullYear() !== year || objDate.getMonth() !== month || objDate.getDate() !== day ) { return false; } // otherwise return true return true; }</code>
Ein mögliches Problem mit diesem Code ist der Versuch, den Monat als Monat = ExpiryDate.substring(0, 2) - 1 zu extrahieren. Dadurch wird 1 vom Monat subtrahiert Wert, was möglicherweise zu ungültigen Monatszahlen führt. Um dies zu korrigieren, sollten Sie den Monat als Monat = parseInt(ExpiryDate.substring(0, 2), 10) - 1 extrahieren.
Ein weiteres potenzielles Problem liegt in der Handhabung des Jahres. Der Code prüft, ob das Jahr im Bereich von 1000 bis 3000 liegt, berücksichtigt jedoch nicht die Möglichkeit einer zweistelligen Jahreszahl (z. B. „19“ oder „20“). Um sowohl zweistellige als auch vierstellige Jahreszahlen zu berücksichtigen, können Sie die Jahresextraktions- und Validierungslogik wie folgt ändern:
<code class="js">// extract year if (ExpiryDate.substring(6, 7) === '/') { year = parseInt(ExpiryDate.substring(6, 8), 10); // 2-digit year } else { year = parseInt(ExpiryDate.substring(6, 10), 10); // 4-digit year } // test year range if (year < 1000 || year > 2999) { return false; }</code>
Außerdem geht der Code derzeit davon aus, dass das Format „mm/tt/jjjj“ lautet strikt eingehalten. Wenn Sie nachsichtiger sein und flexible Datumszeichenfolgenformate zulassen möchten (z. B. andere Trennzeichen als Schrägstriche zulassen), müssen Sie den Code entsprechend ändern.
Das obige ist der detaillierte Inhalt vonWarum kann der JavaScript-Datumsvalidierungscode das Format „mm/tt/jjjj“ nicht korrekt validieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!