Eingabe vor dem Versenden überprüfen

Thomas_Jung

Erfahrenes Mitglied
Hallo
Ich möchte vor dem Versenden des Formular prüfen ob im Feld nummern
1. Nur Zahlen von 0-9 vorhanden sind
2. Keine 0 sich am Anfang der Zahl befindet
3. Keine Leerzeichen sich am Anfang oder Ende befinden
4. Zwischen den eingegebenen Zahlen muss b.z.w darf max ein Leerzeichen sein.

Beispiel:
Richtig
1 22 333 4444 50000
Falsch
0 1 2 3 4 5
Falsch
1 2 3 4 05
Falsch
1..2....3....4..... 5

Mein Code bisher
PHP:
$nummern= $_POST['nummern'];

if (preg_match ("/^([0-9]+)$/", $nummern))
{
echo "Eingabe OK";
}
else
{
echo "Bitte geben Sie nur Zahlen getrennt durch Leerzeichen ein";
}


Code:
<form action="test.php" method="POST">
<input type="text" name="nummern" value="">
<input type="submit" value="Send">
</form>

Gruß Thomas
 
Hallo suye

Ein Problem weniger.
Bleibt nur noch:
2. Keine 0 sich am Anfang der Zahl befindet
4. Zwischen den eingegebenen Zahlen muss b.z.w darf max ein Leerzeichen sein.

PHP:
$nummern= $_POST['nummern'];
$nummern= trim($nummern); 

if (preg_match ("/^([0-9]+)$/", $nummern))
{
echo "Eingabe OK";
}
else
{
echo "Bitte geben Sie nur Zahlen getrennt durch Leerzeichen ein";
}

Gruß Thomas
 
PHP:
if (preg_match ("/^[1-9][\d\s]*$/", $nummern) && !strstr('  ',$nummern))
{
echo "Eingabe OK";
}
else
{
echo "Bitte geben Sie nur Zahlen getrennt durch Leerzeichen ein";
}
 
Hallo Sven Mintel

Danke für die Antwort.

Wenn ich die Zahlen 1 2 03 eingebe Zeigt er mir Eingabe OK an.
Das sollte nicht sein weil 03 dabei ist. Die 0 am Anfang der Zahl ist nicht erlaubt.

Gruß Thomas
 
Ich hab hier einen etwas komplexeren Ausdruck, dieser schliesst aber gleich mit ein, dass nur maximal ein Leerzeichen zwischen den Ziffern sein darf.
Im Editor hatte dieser aber irgendwie Probleme mit dem Zeilenende, daher hab ich das mal weggelassen.
Code:
^[1-9]([\s]?[\d])*
Alternativ kannst Du auch den folgenden mal testen, das ist der gleiche Ausdruck, nur eben mit Zeilenende, also die Variante die bei mir im RegEx-Editor nicht funktionieren wollte.
Code:
^[1-9]([\s]?[\d])*$

Nachtrag: Dieser RegEx schliesst auch Strings wie 1 02... aus.
Code:
^[1-9]([\s]?[1-9]+[\d]*)*
Also der nun zuletzt angesprochene Punkt.
 
Anderer Vorschlach:
PHP:
if(!preg_grep('@(\S|\s{2,})@',preg_split('|[1-9]\d*|',trim($nummern))))
  {
    echo "Eingabe OK";
  }
else
  {
    echo "Bitte geben Sie nur Zahlen getrennt durch Leerzeichen ein";
  }
 
Hallo Sven Mintel, Dennis Wronka

Beide Abfragen funktionieren super welche soll ich jetzt nehmen? :)

Vielen Dank.
Gruß Thomas
HTML:
if(!preg_grep('@(\S|\s{2,})@',preg_split('|[1-9]\d*|',trim($nummern))))

if (preg_match ("/^[1-9]([\s]?[1-9]+[\d]*)*$/", $nummern) && !strstr('  ',$nummern))
 
Zurück