---
title: "preg_match och datum som inte lirar"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/185950-preg-match-och-datum-som-inte-lirar"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "MickeA.com"
published: "2011-01-31T10:37:53.000Z"
updated: "2011-01-31T15:53:01.000Z"
replies: 7
views: 1640
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/php/185950-preg-match-och-datum-som-inte-lirar"
---

# preg_match och datum som inte lirar

## #1 — MickeA.com, 2011-01-31T10:37Z

Tja

Har följande:

```php
if(isset($hash['born_from']) && isset($hash['born_to']) && preg_match("/^(19|20[0-9{2}]+)-([0-9{2}]+)-([0-9{2}]+)$/", $hash['born_from']) && preg_match("/^(19|20[0-9{2}]+)-([0-9{2}]+)-([0-9{2}]+)$/", $hash['born_to'])){
	$born_from = $hash['born_from'];
	$born_to   = $hash['born_to'];
}
```

Men.. den accepterar inte datum som ligger före år 2000 av någon anledning. Någon som kan tala om vad jag gör för fel?

Tack!

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

## #2 — voigtann1, 2011-01-31T10:56Z

du säger att den skall matchar på 19 eller 20xx:

```
$dateMatchPattern = "/^((?:19|20)[0-9{2}]+)-([0-9{2}]+)-([0-9{2}]+)$";

if(isset($hash['born_from']) && isset($hash['born_to']) && preg_match($dateMatchPattern, $hash['born_from']) && preg_match($dateMatchPattern, $hash['born_to'])){
    $born_from = $hash['born_from'];
    $born_to   = $hash['born_to'];
}
```

borde fungera bättre

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

## #3 — MickeA.com, 2011-01-31T14:54Z

Hmm, fungerar inte:

```php
$yearPattern = "/^((?:19|20)[0-9{2}]+)-([0-9{2}]+)-([0-9{2}]+)$";
if(isset($_POST['born_from']) && isset($_POST['born_to']) && preg_match($yearPattern, $_POST['born_from']) && preg_match($yearPattern, $_POST['born_to'])){
	$born_from = safesql($_POST['born_from']);
	$born_to = safesql($_POST['born_to']);
}
```

Mina datum är i formatet *yyyy-mm-dd*.

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

## #4 — voigtann1, 2011-01-31T15:00Z

Det kan inte ha fungerat alls bra innan:

```
^((?:19|20)[0-9]{2})-(\d{2})-(\d{2})$
```

tog bort \[0-9{2}\] vilket inte alls är det du tror det är att den matchar två nummer, du skrev att den skall matchar 0-9, { och } minst en gång (+).

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

## #5 — MickeA.com, 2011-01-31T15:04Z

Nja, din fungerar på samma sätt som den jag hade från början, endast datum **större än** 1999-12-31 fungerar.

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

## #6 — GunnarD, 2011-01-31T15:05Z

Denna kod fungerar:

```php
<?php

$strang="Date is 2932-03-02 someday";

$pattern="/[1-2]\d{3}-[0-1]\d-[0-3]\d/";

preg_match($pattern, $strang, $matches);

print_r($matches);

?>
```

Den fungerar för åren 1000 - 2999.

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

## #7 — voigtann1, 2011-01-31T15:07Z

```
^((?:19|20)[0-9]{2})-(\d{2})-(\d{2})$
```

matchar korrekt få ut om jag skriver: 1980-01-31
1 =\> 1980
2 =\> 01
3 =\> 31

så det förstå jag inte varför det inte skulle fungera för dig.

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

## #8 — MickeA.com, 2011-01-31T15:53Z

...ledsen att jag är en idiot... felet fanns i en klass och jag ändrade bara på ett ställe hela tiden, ditt första förslag fungerar helt säkert lika bra som dom andra.

Får skylla på att det är midnatt och jag är trött :)

Tack!

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

---

Tråden på webben: https://www.webforum.nu/amne/php/185950-preg-match-och-datum-som-inte-lirar
