Superheld: Var auf Zahlen UND Buchstaben prüfen

Hallo zusammen,

ich hänge an einer kleineren Sache, komme aber nicht weiter.
Mir ist bekannt wie ich mit php eine Var auf Zahlen oder auf Buchstaben prüfe.

Nun aber mein aktueller Fall:

Ich möchte prüfen ob in einer var (POST) Zahlen UND Buchstaben enthalten sind => wenn ja die Buchstaben löschen.

So klpppt es leider nicht:

  
if ((is_numeric($_POST["var"])) && (preg_match('#^[a-z]+$#i', $_POST["var"]))  

Vielen Dank für eure Hilfe

  1. Hello,

    Ich möchte prüfen ob in einer var (POST) Zahlen UND Buchstaben enthalten sind => wenn ja die Buchstaben löschen.

    Du meinst sicherlich Ziffernzeichen. Das wären dann 0 .. 9?
    Dann lies den String von Anfang bis Ende durch und übertrage nur die Ziffernzeichen in einen neuen.

    Was ist, wenn z.B. "-2.01 cm" in dem String steht? Was soll dann übertragen werden?

    Liebe Grüße aus Syburg

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo,

      leider nein => wenn z.b. nur Buchstaben eingegeben werden sollen diese nicht gelöscht werde.

      Praktisch ist es so:

      In ein Form kann ein User einen Ort ODER eine PLZ eigeben.
      Wenn er aber z.b. "83333 München" eingibt soll im weiteren Script nur die PLZ -also 83333 Verwendung finden.

      Wenn ein user NUR die Zahl "83333" ODER NUR München eingibt soll dies auch so bleiben...

      Ich kann aber nicht nach dem Leerzeichen suchen => ggf. gibt ma ja auch "83 333 München" ein oder "München 83 333".

      1. Hi,

        Wenn er aber z.b. "83333 München" eingibt soll im weiteren Script nur die PLZ -also 83333 Verwendung finden.

        Weil 83333 nicht die PLZ von München ist?

        Wenn ein user NUR die Zahl "83333" ODER NUR München eingibt soll dies auch so bleiben...

        Daß eine PLZ zu mehreren Orten gehören kann, ist Dir bewußt?

        Daß es mehrere Orte gleichen Namens gibt, ist Dir bewußt? (z.B. 99438 München, 80xxx/81xxx München)

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hallo,
          ja, dass ist mir bewusst. Aber darum geht es nicht. Bitte einfach die Frage beantworten oder auch nicht.
          Wenn mehrere Orte gleichen Namens (z.B. Neustadt) angefragt werden bekommt der User schon eine Auswahl aller Städte Namens Neustadt.

          Es geht nur um die formulierte Frage.

          PS: 83333 München gibt es ;-)

          1. Hi,

            Bitte einfach die Frage beantworten oder auch nicht.

            Zitat 224

            PS: 83333 München gibt es ;-)

            Nicht laut den offiziellen Post-Daten.
            Da gibt es mit 8333 am Anfang nur

            83334 Inzell
            83339 Chieming

            Aber nicht 83333 (auch nicht mit anderen Ortsnamen als München).

            Es gibt (u.a.) 80333 München, also mit 0 statt 3 an zweiter Stelle

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            O o ostern ...
            Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
            1. Danke für diesen Hinweis-wird mein Leben verändern...

              Dann nehmen wir die PLZ 81479 (Pullach).

              Also vielleicht verstehst du ja jetzt das es hier ums programmieren geht und nicht ums sinnfreie schreiben:

              Praktisch ist es so:

              In ein Form kann ein User einen Ort ODER eine PLZ eigeben.
              Wenn er aber z.b. "81479 Pullach" eingibt soll im weiteren Script nur die PLZ -also 81479 Verwendung finden.

              Wenn ein user NUR die Zahl "81479" ODER NUR Pullacheingibt soll dies auch so bleiben...

              Ich kann aber nicht nach dem Leerzeichen suchen => ggf. gibt ma ja auch "81 479 Pullach" ein oder "Pullach 81 479".

              Nochmal zum Verdeutlichen:
              Aus der Eingabe "1a2b3c4711jko" soll folgendes werden: "1234711".
              Eingabe "123456" bleibt "123456".
              Eingabe "Irgend ein Ort" bleibt "Irgend ein Ort".

              1. Hi,

                lass dir doch einfach mit regex nur \d ausgeben und fertig. So mache ich das in genau deinem Fall.

                Mike

                1. Hallo Mike,

                  hast du ein Beispiel? Verstehe es so leider nicht und finde auch nichts was mir weiterhilft...

                  Gruss

                  1. Hi,

                    hast du ein Beispiel? Verstehe es so leider nicht und finde auch nichts was mir weiterhilft...

                      
                    <?php  
                    error_reporting(E_ALL);  
                      
                    // Text bzw. String der durchsucht werden soll  
                    $string = 'Bla abc 12345 def 67 End';  
                      
                    // das Suchmuster mit Delimiter und Modifer (falls vorhanden)  
                    $pattern = '#\d#U';  
                      
                    // RegEx mit preg_match_all() auswerten  
                    preg_match_all($pattern, $string, $array);  
                      
                    // formatierte Ausgabe  
                    echo '<pre>', print_r($array, true), '</pre>';  
                      
                    // als String  
                      
                    echo 'Die Zahl lautet: '.implode('',$array);  
                      
                    ?>  
                    
                    

                    Mike

                    1. Hi,

                      // als String
                      echo 'Die Zahl lautet: '.implode('',$array);

                      Kleiner Fehler noch, die Werte bfinden sich ja in $array[0]

                      also:

                      echo 'Die Zahl lautet: '.implode('',$array[0]);

                      Mike

                      1. Hallo Mike,
                        das habe ich schon gesehen-trotzdem Danke.
                        Leider klappt es noch nicht ganz. Wenn jemand nur Buchstaben eingibt ergibt dies kein Ergebnis:

                          
                        error_reporting(E_ALL);  
                          
                        // Text bzw. String der durchsucht werden soll  
                        $string = 'koeln';  
                          
                        // das Suchmuster mit Delimiter und Modifer (falls vorhanden)  
                        $pattern = '#\d#U';  
                          
                        // RegEx mit preg_match_all() auswerten  
                        preg_match_all($pattern, $string, $array);  
                          
                        // formatierte Ausgabe  
                        echo '<pre>', print_r($array, true), '</pre>';  
                          
                        // als String  
                          
                        echo 'Die Zahl lautet: '.implode('',$array[0]);  
                        
                        

                        Hier soll ja jetzt "Koeln" augegeben werden.
                        Also nur dann Buchstaben (a-z, A-Z) löschen wenn die Var aus Zahlen UND Buchstaben besteht.

                        Viele Grüsse

                        1. Hi,

                          das habe ich schon gesehen-trotzdem Danke.
                          Leider klappt es noch nicht ganz. Wenn jemand nur Buchstaben eingibt ergibt dies kein Ergebnis:

                          ja ist doch richtig. Wo habe ich dich denn falsch verstanden? Wenn Jmeand keine PLZ eingibt kann ja auch nicht danach gesucht werden.

                          Mike

                          1. Hi,

                            also, es geht um ein Formular mit einem Eingabefeld.
                            Die Var aus dem Eingabefeld heisst "$loc".

                            Nun die Möglichen Eingaben und das was daraus werden soll:

                              
                            $loc = "123456" //kommt aus Formular  
                            //Hier soll geprüft werden-weiss leider nicht wie ob  
                            //die $loc aus Zahlen UND Buchstaben besteht-wenn Sie aus BEIDEN besteht  
                            //=> Buchstaben löschen  
                            //da keine Buchstaben-auch nichts zu löschen  
                            echo $newloc; // 123456  
                              
                            $loc = "Tollestadt" //kommt aus Formular  
                            //Hier soll geprüft werden-weiss leider nicht wie ob  
                            //die $loc aus Zahlen UND Buchstaben besteht-wenn Sie aus BEIDEN besteht  
                            //=> Buchstaben löschen  
                            //da hier NUR Buchstaben sind und keine Zahle auch nichts löschen  
                            echo $newloc; // Tollestadt  
                              
                            $loc = "123456 Tollestadt" //kommt aus Formular  
                            //Hier soll geprüft werden-weiss leider nicht wie ob  
                            //die $loc aus Zahlen UND Buchstaben besteht-wenn Sie aus BEIDEN besteht  
                            //=> Buchstaben löschen  
                            //da hier Beides (Buchstaben UND Zahlen) sind die Buchstaben löschen  
                            echo $newloc; // 123456  
                            
                            

                            Superheld

                            1. Hi,

                              ich verstehe zwar nicht deine Vorgehensweise aber du suchst vielleicht die ctype Funktionen:http://php.net/manual/de/function.ctype-digit.php

                              Mike

                              1. Hallo Mike,
                                Hallo Rothschneider,

                                das hilft mir leides alles nicht weiter.
                                Ich "bastel" gerade eine Umkreissuche. Das klappt auch alles wunderbar.
                                Das Problem ist folgendes:

                                1:
                                Jemand such in "Köln" + Umkreis 10km

                                2:
                                Jemand sucht in "50678" (eine PLZ Innenstadtbereich von Köln)

                                3:
                                Jemand sucht nach "50678 Köln"

                                Die PLZ gibt mir den Wert in km zurück der der eigentlichen Entfernung sehr nahe kommt => weil die PLZ einen geringeren "Umfang" hat als der gesamte Bereich (Umfang) Köln (Randbezirke).

                                Dahe möchte ich -falls eine zahl in der var $loc (50678 Köln)- steht nur diese nutzen.

                                Alles andere (Gültigkeit der PLZ, Ortsnamengleichheit...) wird bereits im Script berücksichtigt-es geht nur ums "filter" der $loc wie beschrieben.

                                Viele Grüsse

                                1. Hi,

                                  das hilft mir leides alles nicht weiter.

                                  kann ich zwar nicht nachvollziehen, aber...

                                  Ich "bastel" gerade eine Umkreissuche. Das klappt auch alles wunderbar.

                                  Also mit den Koordinaten?

                                  Das Problem ist folgendes:

                                  Jemand such in "Köln" + Umkreis 10km

                                  Also brauchst du zb. eine PLZ, aber welche von den vielen möglichen

                                  Jemand sucht in "50678" (eine PLZ Innenstadtbereich von Köln)

                                  Sollte ja kein Problem sein.

                                  Jemand sucht nach "50678 Köln"

                                  Jetzt hast du wieder die PLZ, die du brauchst und kannst du daraus filtern.

                                  Die PLZ gibt mir den Wert in km zurück der der eigentlichen Entfernung sehr nahe kommt => weil die PLZ einen geringeren "Umfang" hat als der gesamte Bereich (Umfang) Köln (Randbezirke).

                                  Das verstehe ich nicht aber hat ja uch nichts mit deiner Frage zu tun.

                                  Dahe möchte ich -falls eine zahl in der var $loc (50678 Köln)- steht nur diese nutzen.

                                  Ja und, nochmals \d

                                  Also irgendwie drehen wir uns im Kreis, du hast doch alles was du brauchst.

                                  Mike

                                  1. Moin,

                                    ich verstehe es nicht. Ich habe leider nicht das was ich brauche.

                                      
                                    if($loc(Zahlen UND Buchstaben))  
                                    {  
                                    funktion(buchstaben löschen)  
                                    }  
                                      
                                    if($loc(NUR Zahlen))  
                                    {  
                                    funktion(Nichts löschen)  
                                    }  
                                      
                                    if($loc(NUR Buchstaben))  
                                    {  
                                    funktion(Nichts löschen)  
                                    }  
                                    
                                    

                                    Diese "Funktion" brauche ich-das bekomme ich nicht hin...

                                    1. Hi,

                                      ich verstehe es nicht. Ich habe leider nicht das was ich brauche.

                                      offen gestanden, frage ich mich wie du den Rest deiner Aufgabenstellung löst. Nochmals, du hast alles was du brauchst:

                                      if($loc(Zahlen UND Buchstaben)){ funktion(buchstaben löschen)}

                                      da hilft dir mein Regex, wenn Zahlen drin sind findet er die und gibt auch nur diese aus, wenn er nichts findet, ja dann sind auch keine Zahlen drin.

                                      if($loc(NUR Zahlen)){funktion(Nichts löschen)}

                                      Das kannst du noch mit in if(preg_match...) einbringen und erledigt sich von selbst, ode aber nochmal nachfragen mit den ctype Funktionen die ich schon genannt habe.

                                      if($loc(NUR Buchstaben)){funktion(Nichts löschen)}

                                      Wenn preg_match... nicht greift sind auch keine Zahlen drin, also bleibt $loc auch $loc

                                      Diese "Funktion" brauche ich-das bekomme ich nicht hin...

                                      Ok nocheinmal angepasst für dich:

                                        
                                      <?php  
                                        
                                        
                                      error_reporting(E_ALL);  
                                        
                                      // Text bzw. String der durchsucht werden soll  
                                      $string = 'Bla abc 12345 def 67 End';  
                                        
                                      // das Suchmuster mit Delimiter und Modifer (falls vorhanden)  
                                      $pattern = '#\d#U';  
                                        
                                      // RegEx mit preg_match_all() auswerten  
                                      if(preg_match_all($pattern, $string, $array))  
                                      {  
                                      echo '<h5>Es sind alles Zahlen oder Zahlen enthalten, egal am Ende bleiben hierdurch nur die Zahlen im Array erhalten</h5>';  
                                        
                                        
                                      // formatierte Ausgabe  
                                      echo '<pre>', print_r($array, true), '</pre>';  
                                        
                                      // als String  
                                      echo '<h3>Die Zahl lautet: '.implode('',$array[0]).'</h3>';  
                                      }  
                                        
                                      // Falls keine Zahlen vorhanden  
                                      else{  
                                      echo'<h5>Da preg_match_all nicht greift, muss etwas anderes im String stehen, das koennten Buchstaben sein, aber auch anderes, aber definitiv keine normalen Zahlen</h5>';  
                                      echo '$loc lautet: '.$string;  
                                        
                                      }  
                                        
                                        
                                      ?>  
                                      
                                      
                            2. Superheld

                              erst prüfen, ob gültige PLZ
                              Wenn ja, weiter

                              Nein
                              prüfen, ob gültige Zeichenmenge [a-zA-Z etc.] für Stadt
                              wenn ja, weiter

                              Nein
                              Zahlen extrahieren ala Mike
                              erfolg, weiter

                              Nein
                              nichts brauchbares dabei

                              kürzester Stadtname Deutschlands: Ob
                              na gut, ist nur ein Dorf :)

                              Rothschneider

      2. Hi Superheld,

        leider nein => wenn z.b. nur Buchstaben eingegeben werden sollen diese nicht gelöscht werde.

        Das könntest du z.B. so lösen:

        $plz = $_POST['plz'];  
        // wenn $plz Ziffern enthält  
        if (preg_match('/[0-9]/', $plz)) {  
          // alles was keine Ziffern sind entfernen  
          $plz = preg_replace('/[^0-9]/', '', $plz);  
        }
        

        Alternativ am Anfang prüfen, ob $plz nicht nur eine Ziffer, sondern genau fünf Ziffern enthält, durch Verwendung des RegEx '/[0-9]{5}/'.

        Viele Grüße,
          ~ Dennis.

        1. Hi,

          Alternativ am Anfang prüfen, ob $plz nicht nur eine Ziffer, sondern genau fünf Ziffern enthält, durch Verwendung des RegEx '/[0-9]{5}/'.

          '/[0-9]{5}/' prüft nicht auf genau 5, sondern mindestens fünf aufeinanderfolgende Ziffern.
          Sowohl abc12345def als auch 0123456 werden von diesem Ausdruck gematcht, da Du ihn nicht am Stringanfang/ende verankerst.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Hi MudGuard,

            '/[0-9]{5}/' prüft nicht auf genau 5, sondern mindestens fünf aufeinanderfolgende Ziffern.
            Sowohl abc12345def als auch 0123456 werden von diesem Ausdruck gematcht, da Du ihn nicht am Stringanfang/ende verankerst.

            Aufgrund der aktuellen Wirtschaftskrise ist derzeit leider kein Dollar mehr übrig :-P
            (Jaja, und ein Zirkumflex auch nicht *g*)

            Viele Grüße,
              ~ Dennis.