Prova un po' questa:

codice:
if(
	preg_match(
		'/^(0|(?(?=.*\.)[1,9]\d{0,2}(?:\.\d{3})*|[1,9]\d*))(?:,(\d{1,2}))?$/'
		,$euro // valuta da controllare
		,$mth // array: 0=>valuta, 1=>interi, 2=>decimali
	)
)
echo '<pre>'.print_r($mth,true).'</pre>';
else exit('Formattazione scorretta');