30 Stimmen

Javascript - Regex zur Überprüfung des Datumsformats

Gibt es eine Möglichkeit, eine Regex in JavaScript, die Daten von mehreren Formaten, wie validiert haben: DD-MM-YYYY oder DD.MM.YYYY oder DD/MM/YYYYY usw.? Ich brauche alle diese in einer Regex und ich bin nicht wirklich gut mit ihm. Bis jetzt habe ich mit diesem kommen: var dateReg = /^\d{2}-\d{2}-\d{4}$/; für TT-MM-JJJJ. Ich muss nur das Datumsformat validieren, nicht das Datum selbst.

43voto

Billy Moon Punkte 54553

Sie könnten eine Zeichenklasse verwenden ( [./-] ), so dass die Trennzeichen jedes der definierten Zeichen sein können

var dateReg = /^\d{2}[./-]\d{2}[./-]\d{4}$/

Oder noch besser, die Zeichenklasse für das erste Trennzeichen abgleichen und dann als Gruppe erfassen ([./-]) und verwenden Sie einen Verweis auf die erfasste Gruppe \1 um das zweite Trennzeichen anzupassen, wodurch sichergestellt wird, dass beide Trennzeichen identisch sind:

var dateReg = /^\d{2}([./-])\d{2}\1\d{4}$/

"22-03-1981".match(dateReg) // matches
"22.03-1981".match(dateReg) // does not match
"22.03.1981".match(dateReg) // matches

20voto

nicoabie Punkte 2525

Format, Tage, Monate und Jahr:

var regex = /^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$/;

10voto

mplungjan Punkte 153338

Die vorgeschlagene Regex validiert nicht das Datum, sondern nur das Muster.

Also 99.99.9999 wird die Regex bestehen.

Sie haben später angegeben, dass Sie nur das Muster validieren müssen, aber ich denke immer noch, dass es sinnvoller ist, ein Datumsobjekt zu erstellen

function isDate(str) {    
  var parms = str.split(/[\.\-\/]/);
  var yyyy = parseInt(parms[2],10);
  var mm   = parseInt(parms[1],10);
  var dd   = parseInt(parms[0],10);
  var date = new Date(yyyy,mm-1,dd,0,0,0,0);
  return mm === (date.getMonth()+1) && dd === date.getDate() && yyyy === date.getFullYear();
}
var dates = [
    "13-09-2011", 
    "13.09.2011",
    "13/09/2011",
    "08-08-1991",
    "29/02/2011"
]

for (var i=0;i<dates.length;i++) {
    console.log(dates[i]+':'+isDate(dates[i]));
}

9voto

Sie können reguläre Mehrfachausdrücke mit Hilfe des Operators OR (|) verwenden.

function validateDate(date){
    var regex=new RegExp("([0-9]{4}[-](0[1-9]|1[0-2])[-]([0-2]{1}[0-9]{1}|3[0-1]{1})|([0-2]{1}[0-9]{1}|3[0-1]{1})[-](0[1-9]|1[0-2])[-][0-9]{4})");
    var dateOk=regex.test(date);
    if(dateOk){
        alert("Ok");
    }else{
        alert("not Ok");
    }
}

Die obige Funktion kann die Datumsformate JJJJ-MM-TT, TT-MM-JJJJ überprüfen. Sie können den regulären Ausdruck einfach erweitern, um jedes beliebige Datumsformat zu prüfen. Angenommen, Sie möchten JJJJ/MM/TT überprüfen, ersetzen Sie einfach "[-]" durch "[-|/]". Dieser Ausdruck kann Datumsangaben bis 31 und Monate bis 12 überprüfen. Schaltjahre und Monate, die mit 30 Tagen enden, werden jedoch nicht berücksichtigt.

4voto

Simon Punkte 840

Verwendung von Klammern /^\d{2}[.-/]\d{2}[.-/]\d{4}$/ http://download.oracle.com/javase/tutorial/essential/regex/char_classes.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X