Heim > Web-Frontend > js-Tutorial > Warum kann der JavaScript-Datumsvalidierungscode das Format „mm/tt/jjjj' nicht korrekt validieren?

Warum kann der JavaScript-Datumsvalidierungscode das Format „mm/tt/jjjj' nicht korrekt validieren?

DDD
Freigeben: 2024-10-30 09:24:02
Original
389 Leute haben es durchsucht

Why does the JavaScript date validation code fail to validate the

Validierung des Datumsformats „MM/TT/JJJJ“ in JavaScript

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage