Problem mit Leerzeichen bei Prüfung

TekitG

Grünschnabel
Hallo,

ich habe ein Problem mit den Leerzeichen:

Ich möchte über ein Forumlar den Ort einlesen und diese Eingabe auf Richtigkeit überprüfen (damit keine Zahlen eingebeben werden).

Hier ein Auszug meines Codes:

$zeichen_name="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZß-. "; (letztes zulässiges Zeichen soll ein Leerzeichen sein)

if($w_ort!="")
{
$laenge=strlen($w_ort);
for($a=0; $a<$laenge; $a++)
{
$b=substr($w_ort, $a, 1);

if(strstr($zeichen_name,$b)==false)
{
?>
<tr>
<td>Wunschort der Arbeitsstätte: <font color="#0000ff">*</font></td>
<td><input type="text" name="w_ort" size="35" value=<? print($w_ort)?>></td>
</tr>
<?
break;
}
Meine Eingabe: St. August

Nach der Prüfung steht dann nur noch St.

Das Leerzeichen und der Rest wird nicht erkannt, obwohl ich es oben bei der Definition angegeben habe.

Vielleicht kann mir ja Jemand weiter helfen?!

Vielen Dank für die Hilfe.

Gruß
TekitG
 
Ich würde das mit preg_match lösen, so zum Beispiel:
Code:
preg_match("/([a-zA-ZäÄöÖüÜß\-\.\s]+)/", "St. August", $regs)

dann ist $regs[0] der Wunschort

Gruß Marvin.
 
Ich bin mir zwar nicht ganz sicher, aber ich glaube mich erinnern zu können, dass der Bindestrich immer ganz am Ende kommen muss, da PHP sonst denkt, es handelt sich um eine von-bis-Konstruktion (also z. B. a-z).
 
Ich hab den Bindestrich escapet :rolleyes:
Code:
if (preg_match("/([a-zA-ZäÄöÖüÜß\-\.\s]+)/", "Klein-Offenseth Sparrieshoop", $regs)) {
   echo "<br>" . $regs[0];
}
gibt folgendes aus:
Klein-Offenseth Sparrieshoop
und das soll es ja auch :)

Gruß Marvin.
 
@ SilentWarrior
habs geändert, hat leider nicht funktioniert :(

@ Marvin Schmidt
meine PHP Kenntnisse befinden sich noch im Anfangsstadium :) Wird in Deinem Code jetzt nur der String in Anführungszeichen geprüft?
 
Also, ich versuche das mal zu erklären ;)

mixed preg_match(string Suchmuster, string Zeichenkette [, array Treffer [, int Flags [, int Versatz]]])

Das ist der Syntax von preg_match.
Ich habe preg_match folgendermaßen benutzt:
Code:
preg_match("/([a-zA-ZäÄöÖüÜß\-\.\s]+)/", "Klein-Offenseth Sparrieshoop", $regs)
Dabei ist "/([a-zA-ZäÄöÖüÜß\-\.\s]+)/" das Suchmuster, "Klein-Offenseth Sparrieshoop" die Zeichenkette, die überprüft wird, und $regs das Array, welches mit den Treffern, wenn welche vorhanden, gefüllt wird.

Jetzt zum Suchmuster:
In den eckigen Klammern stehen die Zeichen, die in der Zeichenkette vorkommen dürfen.
a-z - alle Kleinbuchstaben (a,b,c,d,e,f,...,x,y,z)
A-Z - alle Großbuchstaben (A,B,C,D,E,F,...,X,Y,Z)
äÄöÖüÜß - Umlaute (groß und klein) und ß ;)
\- - Bindestrich (wird mit \ 'escapet', weil PHP sonst denken würde es sei ein Von-Bis-Konstruktion, wie z.B. a-z, wie SilentWarrior schon sagte)
\. - Punkt (wird ebenfalls escapet, weil . bei preg_match normalerweise ein Platzhalter für ein Zeichen ist.
\s - Leerzeichen

Durch das + nach der eckigen Klammer wird definiert, dass die angegebenen Zeichen beliebig oft nacheinander auftreten dürfen.
Die runden Klammern schließen das ein, was ge'match't werden und nach der Abfrage mit $regs[0] referenziert werden soll.

Ich hoffe, dass ich es wenigstens ein bisschen verständlich erklären konnte.

Gruß Marvin.
 
ja, das hab ich schon besser verstanden :)

Aber wie bau ich das in meine if-Abfrage ein?

if($w_ort!="")
{
$laenge=strlen($w_ort);
for($a=0; $a<$laenge; $a++)
{
$b=substr($w_ort, $a, 1);

if(strstr($zeichen_name,$b)==false)
{
?>
<tr>
<td>Wunschort der Arbeitsstätte: <font color="#0000ff">*</font></td>
<td><input type="text" name="w_ort" size="35" value=<? print($w_ort)?>></td>
</tr>
<?
break;
}

Gruß
TekitG
 
Hab nochmal was am preg_match geändert.
Code:
if (preg_match("/^([a-zA-ZäÄöÖüÜß\-\.\s]+)$/", "Fra~nkfurt", $regs)) {
   echo "<br>" . $regs[0];
}
else {
   echo "<br>Ungültiger Wohnort.";
}
Ich hoffe du kannst damit mehr anfangen ;)

Gruß Marvin.
 
Zurück