Regulärer ausdruck datum Italian style

gleitkomma

Grünschnabel
Hi
habe das problem,
dass ich ein datum im italienischen format checken will ob es gültig ist.

den passenden regulären pattern hab ich auch schon
Code:
^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/(\d{2}))|((0[1-9
]|[12]\d|30)\/(0[13456789]|1[012])\/(\d{2}))|((0[1-9]|1\d|2[
0-8])\/02\/(\d{2}))|(29\/02\/((0[48]|[2468][048]|[13579][26]
)|(00))))$


das script hierzu:

PHP:
$regexp="(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/(\d{2}))|((0[1-9
	]|[12]\d|30)\/(0[13456789]|1[012])\/(\d{2}))|((0[1-9]|1\d|2[
	0-8])\/02\/(\d{2}))|(29\/02\/((0[48]|[2468][048]|[13579][26]
	)|(00))))"; 


	$test_array[]="31/02/04";
	$test_array[]="29/02/04";
	$test_array[]="10/11/03";
	
	foreach( $test_array as $key => $value)
	{
	
		$treffer_array=array();
		print "<b> teste $value </b><br>";
		print "<b> test mit eregi </b><br>";
		if (eregi($regexp,$value,$treffer_array))
		{
			print "$value passt<br>";
		}else
		{
			print "$value passt net :S<br>";
		}
		print "<pre>";
		print_r($treffer_array);
		print "</pre>";
		$treffer_array2=array();
		print "<b> test mit preg_match </b><br>";
		if (preg_match($regexp,$value,$treffer_array2))
		{
			print "$value passt<br>";
		}else
		{
			print "$value passt net :S<br>";
		}
		print "<pre>";
		print_r($treffer_array2);
		print "</pre>";
	}

tja und herauskommt folgendes,
beide sowohl eregi und preg_match bringen bei datum 1 nen fehler (is ja auch richtig so)
bei datum 2 zeigen beide funktionen dass das datum gültig ist.
doch bei datum 3 zeigt eregi keine übereinstimmung aber preg_match zeigt eine übereinstimmung.

wie beseitige ich dieses problem, denn ich will eregi benutzen da ich damit auf string anfang und string ende überprüfen kann.

ich finde aber den fehler nicht.
der reguläre ausdruck müsste eigentlich stimmen.

vllt kann mir ja einer helfen ;)
thx im vorraus.
greets gleitkomma
 
Zuletzt bearbeitet:
Äh wie jetzt?
Warum solltest du denn mit [phpf]preg_match[/phpf] nicht auf "string anfang" und "string ende" überprüfen können?
Verwantwortlich dafür sind doch lediglich in deinem Pattern das circumflex ( ^ ) und das Dollarzeichen ( $ ).
Übrigens dein Pattern sollte dann auch so ausschauen:
PHP:
$regexp= "%^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/(\d{2}))|((0[1-9
]|[12]\d|30)\/(0[13456789]|1[012])\/(\d{2}))|((0[1-9]|1\d|2[
0-8])\/02\/(\d{2}))|(29\/02\/((0[48]|[2468][048]|[13579][26]
)|(00))))$%";
 
Zurück