Preg_replace nur Zahlen

Hallo Forum,

folgender Code soll nur Zahlen zulassen von 0 bis 9:

    if (!preg_replace('/[^0-9]/','',$Erg[$a]))
      $errors[$a] = "Ungültige Zeichen!";

funktioniert auch mit den Zahlen von 1-9. Aber Zahl 0 funktioniert nicht.
Wenn in der Variable $Erg[$a] der Wert 0 ist, ist der Rückgabewert von
preg_replace 0. Irgendwie finde ich kein Lösungsansatz.

Hat jemand eine Idee oder einen besseren Code?

mfg.

[quote=“ollik”]funktioniert auch mit den Zahlen von 1-9. Aber Zahl 0 funktioniert nicht.
Wenn in der Variable $Erg[$a] der Wert 0 ist, ist der Rückgabewert von
preg_replace 0.[/quote]
Natuerlich, ebenso wie er bei 1 1 waere, oder bei 9 9.

Aber es ist ja auch unsinnig, preg_replace zu nehmen, wenn du eigentlich gar nichts ersetzen, sondern nur pruefen willst. Dafuer gibt es preg_match.

Dann musst du dein Suchmuster noch anpassen, wenn du ausschliesslich Ziffern zulassen willst.
/^[0-9]+$/
^ fuer Stringanfang, $ fuer Stringende, und dazwischen nur Ziffern, 1 oder mehr Male.

es gibt da eine ausgezeichnete Funktion:
php.net/is_nummeric

[quote=“michi7x7”]es gibt da eine ausgezeichnete Funktion:
php.net/is_nummeric[/quote]
bei der allerdings auch zahlen wie 123.456 als Numerisch gelten.
wenn es nur Ziffern sein sollen, ist preg_match besser.

nein, es gib ja auch noch is_int() :wink:
allerdings prüft das auf den typ integer, wenn du dem einen string aus zahlen übergibst, ist das noch was anderes, da ein string aus zahlen kein int ist :wink:
aber für strings aus zahlen gibt es auch ne funktion. frag mich jetzt aber nicht nach dem genauen anmen :wink:

de3.php.net/manual/de/function.ctype-digit.php

Also bei deinem Code wäre das dann:

if(!ctype_digit($Erg[$a]) || strlen($Erg[$a]) != 1)
  $errors[$a] = "Ungültige Zeichen!";

prima, funktioniert nun wie gewollt.

viele Grüße.