WinFuture-Forum.de: Datumsgültigkeit - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Datumsgültigkeit


#1 Mitglied ist offline   valeron 

  • Gruppe: aktive Mitglieder
  • Beiträge: 581
  • Beigetreten: 13. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Interessen:Computer

geschrieben 10. Juli 2006 - 14:09

Hi;
Ich habe folgendes problem:
ich baue eine auf php basierende Suche, mit einer Suchmöglichkeit nach Namen und Datum.
In der Mysql Datenbank werden die Daten in dem Format JJJJ.MM.DD (Jahr-Monat-Tag)
gespeichert.

Also wenn einer in mein Suchformular 23.08.2003 eingibt kann er keine ergebnisse bekommen!
Welche möglichkeit gibt es das Format des Datums zu prüfen, damit ich eine Fehlermeldung ausgeben kann?
Wenn es keine Mühe macht könnte mir jemand einen entsprechenden Codeschnipsel bauen?

thx; mfg valeron
0

Anzeige



#2 Mitglied ist offline   stefanra 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.208
  • Beigetreten: 13. September 04
  • Reputation: 1

geschrieben 10. Juli 2006 - 14:12

RegEx wäre wohl die beste Möglichkeit.
0

#3 Mitglied ist offline   valeron 

  • Gruppe: aktive Mitglieder
  • Beiträge: 581
  • Beigetreten: 13. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Interessen:Computer

geschrieben 10. Juli 2006 - 14:46

ok hab mich gerade eingelesen und diesen RegEx [1-3][0-9][0-9][0-9] - [0-1][0-9] - [0-3][0-9] erstellt.

Mein problem ist jetzt aber das ich ale Trennstelle zwischen Jahr-Monat-Tag einen Punkt und ein Minus erlauben will.
Mit diesem RegEx stelle ich zwar sicher das das Format stimmt, aber jetz habe ich das Problem mit den Trennzeichen.
Wo kann man einstellen das er - und . erlaubt?
Dazu habe ich nichts gefunden!

mfg valeron

Dieser Beitrag wurde von valeron bearbeitet: 10. Juli 2006 - 14:47

0

#4 Mitglied ist offline   stefanra 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.208
  • Beigetreten: 13. September 04
  • Reputation: 1

geschrieben 10. Juli 2006 - 15:06

[1-3][0-9][0-9][0-9] (-|\.) [0-1][0-9] (-|\.) [0-3][0-9]

Damit überprüfst du, ob entweder ein Bindestrich oder ein Punkt verwendet wurde.
0

#5 Mitglied ist offline   Gitarremann 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.263
  • Beigetreten: 04. Juni 06
  • Reputation: 3
  • Geschlecht:Männlich
  • Wohnort:Trebnitz

geschrieben 10. Juli 2006 - 15:18

also wenn es möglich ist, würde ich das datum einfach als unix timestamp in der datenbank speichern. das macht vieles einfacher beim vergleichen und damit es keine probleme mit dem format gibt, würde ich die eingabe des enstprechenden datums über sprungmenüs machen. also eins für den tag, eins für den monat und eins für das jahr und aus den werten wird dann entweder auch die unix zeit berechnet oder entsprechend dein benötigtes format gebastelt.

Angehängte Miniaturbilder

  • Angehängtes Bild: sprung.png

Dieser Beitrag wurde von Gitarremann bearbeitet: 10. Juli 2006 - 15:27

Der Pessimist sagt: "Das Glas ist halb leer,"
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
0

#6 Mitglied ist offline   valeron 

  • Gruppe: aktive Mitglieder
  • Beiträge: 581
  • Beigetreten: 13. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Interessen:Computer

geschrieben 10. Juli 2006 - 16:11

Noch ein kleines Problem:
Der RegEx geht nicht in das Script einzubauen.

Bsp.
<?php
	$regex = '[1-3][0-9][0-9][0-9](-|.)[0-1][0-9](-|.)[0-3][0-9]|[1-3][0-9][0-9][0-9]';
	$test = "2009-08-23";

		if(preg_match($regex, $test)) {
			echo"Gut"; 
		} 
		else {
			echo"schlecht";
		}
?>


Das gibt mir immer eine Fehlermeldung, ist denn die Implementierung falsch?

Dieser Beitrag wurde von valeron bearbeitet: 10. Juli 2006 - 16:12

0

#7 Mitglied ist offline   stefanra 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.208
  • Beigetreten: 13. September 04
  • Reputation: 1

geschrieben 10. Juli 2006 - 16:21

$regex = '/[1-3][0-9][0-9][0-9](-|.)[0-1][0-9](-|.)[0-3][0-9]|[1-3][0-9][0-9][0-9]/is';
0

#8 Mitglied ist offline   valeron 

  • Gruppe: aktive Mitglieder
  • Beiträge: 581
  • Beigetreten: 13. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Interessen:Computer

geschrieben 10. Juli 2006 - 16:24

Mist is mir grade in dieser Sekunde eingefallen das ich die Schrägstriche vergessen hab;
sry für die dumme Frage!!!
0

#9 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 10. Juli 2006 - 16:31

RegExps müssen in zwei '/' eingefasst werden. Nebenbei kannst du gleich mal
[0-9]{3} statt [0-9][0-9][0-9] schreiben.
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#10 Mitglied ist offline   valeron 

  • Gruppe: aktive Mitglieder
  • Beiträge: 581
  • Beigetreten: 13. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Interessen:Computer

geschrieben 10. Juli 2006 - 20:40

mit dem RegEx von mir erzwinge ich ja das das Jahr ganz vorne steht,

aber angenommen ich will auch die möglichkeit bieten,
das man nur eine Jahreszahl angibt wie z.B. 2003 :

dann könnte ich wieder [1-3][0-9][0-9][0-9] (oder die Rika version) nehmen _aber_ damit wird auch folgendes gematched:
23.02.2004 bin ich damit an den Grenzen vonRegex oder haben RegExes auch die möglichkeit festzulegen, das danach nichts mehr folgen darf?

habe http://www.chemie.fu-berlin.de/chemnet/use...perl-regex.html <- hier geschaut und einen solchen ausdruck nicht gefunden!

Dieser Beitrag wurde von valeron bearbeitet: 10. Juli 2006 - 20:41

0

#11 Mitglied ist offline   noONE 

  • Gruppe: Mitglieder
  • Beiträge: 7
  • Beigetreten: 16. August 05
  • Reputation: 0
  • Wohnort:Remscheid

geschrieben 11. Juli 2006 - 08:13

Moin,
lass Dir einfach nur die 4 letzten Zeichen des Strings ausgeben...

substr($datum,6,4);


Hier würde wenn $datum = "23.02.2004" ist "2004" ausgeben werden.

Die 6 gibt an, bei welchem Zeichen die Ausgabe beginnen soll (bei 0 beginnend) und die 4, wie lang die Ausgabe sein soll.

Gruß
Ivo

Dieser Beitrag wurde von noONE bearbeitet: 11. Juli 2006 - 08:20

0

#12 Mitglied ist offline   mibtng 

  • Gruppe: aktive Mitglieder
  • Beiträge: 298
  • Beigetreten: 03. Juni 05
  • Reputation: 0

geschrieben 11. Juli 2006 - 08:44

@noONE
Das hilft in dem Fall aber nicht weiter...

@valeron:
Der RegEx den du hast ist ja nur dazu gedacht um zu prüfen, ob die Eingabe korrekt ist.

Anstatt dann zu vergleichen, welches Daten in der Datenbank mit dem eingegebenen Datum übereinstimmen, scheinst du die Daten ebenfalls nur auf Gültigkeit zu überprüfen.
0

#13 Mitglied ist offline   valeron 

  • Gruppe: aktive Mitglieder
  • Beiträge: 581
  • Beigetreten: 13. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Interessen:Computer

geschrieben 11. Juli 2006 - 09:20

Ich überprüfe die Daten erst mit dem RegEx wenn das Datum gültig ist kommt die Suche in der Datenbank.
Dieser [1-3][0-9]{3}(-|.)[0-1][0-9](-|.)[0-3][0-9] RegEx erzwingt schonmal dass das Jahr zuerst steht,

aber ich brauche noch dass auch einfach nur das Jahr (z.B. 2003) als gültig angesehen wird,

dazu mache ich enfache einen | für die nächste möglichkeit und dann wieder [1-3][0-9]{3}
aber nun finde ich keinen RegEx befehl der festlegt das danach _garnichts_ folgen darf!

Dieser Beitrag wurde von valeron bearbeitet: 11. Juli 2006 - 10:31

0

#14 Mitglied ist offline   Rika 

  • Gruppe: aktive Mitglieder
  • Beiträge: 11.533
  • Beigetreten: 11. Juni 03
  • Reputation: 2
  • Geschlecht:Männlich

geschrieben 11. Juli 2006 - 12:41

Zitat

aber nun finde ich keinen RegEx befehl der festlegt das danach _garnichts_ folgen darf!


hinterdiesemstringmussschlusssein$

Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Eingefügtes Bild
Ja, mata ne!

(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
0

#15 Mitglied ist offline   valeron 

  • Gruppe: aktive Mitglieder
  • Beiträge: 581
  • Beigetreten: 13. Oktober 05
  • Reputation: 0
  • Geschlecht:Männlich
  • Interessen:Computer

geschrieben 11. Juli 2006 - 13:47

also:

2002.09.23 <-soll gültig sein
2002 <-soll gültig sein
29.03.2005 <-soll nicht gematched werden

Mein RegEx / [1-3] [0-9] {3} (-|.) [0-1] [0-9] (-|.) [0-3] [0-9] | [1-3][0-9]{3} $ /

Das Dollarzeichen kann aber nicht hinhauen da mit diesem RegEx das erste _und das dritte_ als gültig erklärt werden, wieder ein Fehler meinerseits oder stimmt das mit dem Dollar nicht?
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0