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.
Antworten
Zu viele Anzeigen?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
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]));
}
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.
Verwendung von Klammern /^\d{2}[.-/]\d{2}[.-/]\d{4}$/
http://download.oracle.com/javase/tutorial/essential/regex/char_classes.html
- See previous answers
- Weitere Antworten anzeigen