Var auf Zahlen UND Buchstaben prüfen
Superheld
- php
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
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
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".
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
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 ;-)
Hi,
Bitte einfach die Frage beantworten oder auch nicht.
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
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".
Hi,
lass dir doch einfach mit regex nur \d ausgeben und fertig. So mache ich das in genau deinem Fall.
Mike
Hallo Mike,
hast du ein Beispiel? Verstehe es so leider nicht und finde auch nichts was mir weiterhilft...
Gruss
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
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
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
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
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
Hi,
ich verstehe zwar nicht deine Vorgehensweise aber du suchst vielleicht die ctype Funktionen:http://php.net/manual/de/function.ctype-digit.php
Mike
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
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
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...
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;
}
?>
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
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.
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
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.