---
title: "Validera datum med regexp"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/107172-validera-datum-med-regexp"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "monAmour"
published: "2004-07-12T13:37:17.000Z"
updated: "2007-10-08T06:11:32.000Z"
replies: 13
views: 1007
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/107172-validera-datum-med-regexp"
---

# Validera datum med regexp

## #1 — monAmour, 2004-07-12T13:37Z

Försöker validera ett datum med ett regexp som jag tycker borde fungera men den returnerar FALSE ändå?

Vill att man enbart ska kunna ange datum som YYYY-MM-DD, alltså med bindelsträck emellan, år-månad-dag.

Har testat med det här:

/^d{4}-d{2}-d{2}$/

men det verkar inte funka? hur ska det se ut?

Permalänk: https://www.webforum.nu/p/107172

## #2 — Peter S, 2004-07-12T14:10Z

```
/^\d{4}-\d{2}-\d{2}$/
```

Uttrycket är dock inte optimalt.

 :)

Permalänk: https://www.webforum.nu/p/1385036

## #3 — monAmour, 2004-07-12T15:40Z

Tack! varför behöver man lägga till backslashes? vad betyder det i regexp språk?

Permalänk: https://www.webforum.nu/p/1385075

## #4 — Jojoxx, 2004-07-12T15:59Z

För att [uttrycket](http://devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/regexp.html) skall tolkas som **d**igit (siffra) inte inte just "d". :)

Permalänk: https://www.webforum.nu/p/1385087

## #5 — monAmour, 2004-07-12T16:08Z

ah just ja

Permalänk: https://www.webforum.nu/p/1385093

## #6 — MickeA.com, 2007-10-05T05:44Z

Morrn',
Försöker få till tidigare nämnda datumvalidering tillsammans med Jojoxx's "Spärra tecken", men får inte till det alls:

```
<input type="text" onkeyup="if(!this.value.match([b]/^\d+$/[/b])){ this.value=(this.value.match([b]/\d+/[/b]))?this.value.match([b]/\d+/[/b]):''; }">
```

Det där är för att endast tillåta siffror, men hur ska jag göra för att filtrera bort de tecken som inte är okej enl. datummönstret?

Tack!

Permalänk: https://www.webforum.nu/p/2036659

## #7 — Peter S, 2007-10-05T16:17Z

Komplext problem ;)

Är det typ så här du menar?

```
<input type="text" onkeydown="k=this.value" onkeyup="if(!/^\d{0,4}-?\d{0,2}-?\d{0,2}$/.test(this.value)){ this.value=k.replace(/[^-0-9]/g,'') }">
```

Permalänk: https://www.webforum.nu/p/2036730

## #8 — MickeA.com, 2007-10-05T18:26Z

> **Peter S skrev:**
>
> Är det typ så här du menar?\[

Jo, nästan ;)

Jag vill alltså att man \_endast\_ ska kunna ange det här formatet i fältet:

```
yyyy-mm-dd
```

Din kod stämmer så långt att man endast kan ange siffror, men i din kod kan man tex ange *200565*, vilket inte ska tillåtas.

Det som ska ske är att man måste ange ett datum i "rätt" format, annars ska det tecken man anger suddas ut, precis som i Jojoxx exempel, fast med ett datum.

Permalänk: https://www.webforum.nu/p/2036765

## #9 — Peter S, 2007-10-06T08:57Z

Det luriga då är bl.a. följande:

1. Första gången ett tecken matas in -- hur skall koden bete sig då? En siffra uppfyller ju inte formatet. Detsamma gäller samtliga tecken till dess att formatet stämmer: "2", "20", "200", "2007", "2007-", o.s.v.
2. Antag att ett korrekt datum matas (2007-10-06) -- vad händer om jag skrivit fel och raderar ett tecken? Formatet uppfylls inte längre.

Hur bör skriptet bete sig i ovanstående situationer?

Permalänk: https://www.webforum.nu/p/2036845

## #10 — MickeA.com, 2007-10-06T12:54Z

Aha, då är jag med, kanske det är bättre att isf. köra det som du postade tidigare och kolla med ett mer noggrant mönster när man trycker "spara".

Hur skulle ett sådant, "exakt" mönster kunna se ut?

Aha, såklart... bör ju kunna köra med samma som ovan?

Permalänk: https://www.webforum.nu/p/2036883

## #11 — Peter S, 2007-10-07T19:07Z

Jag håller med om att det är bättre att validera då någon klickar på "Spara". Du kan använda följande för att validera indatat:

```
String.prototype.isValidDate = function()
{
  function leapYear(y){ return y % 400 == 0 || (y % 4 == 0 && y % 100 != 0) }
  if (!/^(\d{4})-(\d{2})-(\d{2})$/.test(this)) return false;
  var y = parseInt(RegExp.$1, 10);
  var m = parseInt(RegExp.$2, 10);
  var d = parseInt(RegExp.$3, 10);
  if (d < 1) return false;
  switch (m){
    case 1: case 3: case 5: case 7: case 8: case 10: case 12:
      if (d > 31) return false;
      break;
    case 4: case 6: case 9: case 11:
      if (d > 30) return false;
      break;
    case 2:
      if (d > 28 + leapYear(y)) return false;
      break;
  }
  return true;
}
...
if (!document.myForm.myElement.value.isValidDate()){
  alert("Ogiltigt datumformat")
}
```

Permalänk: https://www.webforum.nu/p/2037091

## #12 — colione, 2007-10-07T19:33Z

Peter S, vore det inte bättre att låta date-objektet avgöra om det är ett skottår? Typ:

```
function leapYear(y){ return (1===new Date(y,1,29).getMonth())}
```

Permalänk: https://www.webforum.nu/p/2037095

## #13 — Peter S, 2007-10-07T19:53Z

Om det är bättre vet jag inte; smaklökarna får avgöra :bire

Permalänk: https://www.webforum.nu/p/2037104

## #14 — MickeA.com, 2007-10-08T06:11Z

Hmm, här har ni svarat utan att jag fått ngra fler mail om det, strange...
Ska testa det där, tack!

Permalänk: https://www.webforum.nu/p/2037145

---

Tråden på webben: https://www.webforum.nu/amne/javascript/107172-validera-datum-med-regexp
