SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 05.06.2010, 00:03:28
KeinenPlan KeinenPlan ist offline
Anfänger
 
Registriert seit: Jan 2009
Alter: 45
Beiträge: 57
Frage zu einem regulären Ausdruck für Straßennamen(inkl. Hausnummer)!

Durch googlen bin ich auf diesen Ausdruck für die Prüfung von Straßennamen(inkl. Hausnummern) gestoßen:

Zitat:
'^([a-zäöüß\-\.]+\s+)+[0-9]+[a-zäöüß]*((\/|-)[0-9])*$'
Tests haben gezeigt, dass er folgende Strings passieren lässt:

Musterweg 1
Musterweg 1b
Musterweg 1-5
Musterweg 1a-5b
Musterweg 1/3
Musterweg 1 bis 3

Ebenso schluckt er ein ß, zB. in Straße, sowie Vorsätze wie zB. Am, Zur, Zum Auf der, etc.!

Ich bitte an dieser Stelle um Korrektur, falls meine Interpretation des Ausrucks falsch ist; welche ich mit mit Hilfe von wikipedia erarbeitet hab.

'eröffnet den Ausdruck
^ signalisiert den Zeilenanfang

( war nicht expliziert erklärt, aber eröffnet wohl eine Zeichengruppe
[a-zäöüß\-\.] alle Konsonanten und Umlaute(groß oder klein), ß; \-\. gestattet - und .
+ Der voranstehende Ausdruck muss mindestens 1x vorkommen, darf aber auch mehrfach vorkommen
\s steht für ein Leerzeichen(Whitespace)
+ Der voranstehende Ausdruck muss mindestens 1x vorkommen, darf aber auch mehrfach vorkommen
) war nicht expliziert erklärt, aber schließt wohl eine Zeichengruppe
+ Der voranstehende Ausdruck muss mindestens 1x vorkommen, darf aber auch mehrfach vorkommen

[0-9] alle Zahlen von 0-9
+ Der voranstehende Ausdruck muss mindestens 1x vorkommen, darf aber auch mehrfach vorkommen

[a-zäöüß] alle Konsonanten und Umlaute(groß oder klein)
* Der voranstehende Ausdruck darf beliebig oft (auch keinmal) vorkommen

( war nicht expliziert erklärt, aber eröffnet wohl eine Zeichengruppe
( war nicht expliziert erklärt, aber eröffnet wohl eine Zeichengruppe
\/|- gestattet /, | und -
) war nicht expliziert erklärt, aber schließt wohl eine Zeichengruppe
[0-9] alle Zahlen von 0-9
) war nicht expliziert erklärt, aber schließt wohl eine Zeichengruppe
* Der voranstehende Ausdruck darf beliebig oft (auch keinmal) vorkommen

$ kennezeichnet den/das Zeilen-/Stringende
' beendet den Ausdruck


Nun ist mit dem vorhandenen regulären Ausdruck auch leider so eine Eingabe zulässig:

am musterweg 0b

Dies ist natürlich nicht gerade schön von der Optik, aber auch für eine Speicherung in eine DB (wo Kontaktdaten korrekt erfasst sein sollten) ist dies nicht zweckdienlich.

Gut die klein geschriebene Straße wird die Post wohl nicht in Schwierigkeiten bringen, aber von einer Haus Nr. 0 habe ich noch nie was gehört.

Mit meinem Kenntnissstand in Sachen regulären Ausdrücken, der vorher gleich 0 war, hab ich nun versucht die Vorgabe entsprechend anzupassen.

Hier die neue Variante:
Zitat:
'^([A-ZÄÖÜ]{1}[a-zäöüß\-\.]+\s+){1}([a-zäöüß\-\.]+\s+)+([A-ZÄÖÜ]{1}[a-zäöüß\-\.]+\s+)+([A-ZÄÖÜ]{1}[a-zäöüß]+\s+)+[1-9]{1}[0-9]+(\s{1}[a-zß]\s{1}){1,1}((\/|-)[1-9]{1}[0-9])* '
Mein Vorstellung mit dem obigen Konstrukt war es auch folgende Eingaben:
Dr.-von-Kleist-Straße 1 (durchzulassen)
dr.-Von-kleist-straße 0 (zu blocken)

Aber die unkorrekte Schreibweise wird dennoch übernommen!

Ist das, was ich im Sinn habe schlichtweg nicht möglich oder liegts an einem falschen Code?

Zumindest Hausnummern mit führender 0 möchte ich schon eine Weiterverarbeitung verbieten.
Oder muss ich mich diesbzgl. einfach drauf verlassen, dass der User es halt korrekt eingibt?


Wer Ahnung hat möge bitte mal drüber schauen und ggf. verbessern. Thx!
Mit Zitat antworten
  #2  
Alt 05.06.2010, 09:20:58
cortex cortex ist offline
SELFPHP Profi
 
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
AW: Frage zu einem regulären Ausdruck für Straßennamen(inkl. Hausnummer)!

hast du auch an buchstaben mit accent wie é, è oder ê gedacht?

artikel / tutorials zu regex:

http://www.peterkropff.de/site/php/regexp.htm
http://gnosis.cx/publish/programming...pressions.html
http://regexp-evaluator.de/
http://www.phpro.org/tutorials/Intro...PHP-Regex.html

Zitat:
Zitat von KeinenPlan Beitrag anzeigen
Ist das, was ich im Sinn habe schlichtweg nicht möglich oder liegts an einem falschen Code?
es ist möglich - ganz bestimmt. behalte bei regex im hinterkopf: je komplexer deine erwartungen, desto komplexer der ausdruck. beschränke dich also auf das wesentliche und verzichte auf spielereien - regex sind ein mächtiges werkzeug, das man langsam kennenlernen muss.

cx
Mit Zitat antworten
  #3  
Alt 05.06.2010, 22:12:59
KeinenPlan KeinenPlan ist offline
Anfänger
 
Registriert seit: Jan 2009
Alter: 45
Beiträge: 57
AW: Frage zu einem regulären Ausdruck für Straßennamen(inkl. Hausnummer)!

Also um das ganze mal von der Verarbeitung her zu vereinfachen, werde ich den Straßennamen und die Hausnummer getrennt über ein Formular erfassen.

Diese Eingabevarianten sollen erlaubt sein:
a) 1
b) 1a
c) 1A
d) 1-1
e) 1-2a
f) 1a-1b
g) keine Eingabe für Straßen ohne Hausnummer

Die entsprechende RegExp hab ich mal in eine Prüfroutine mit Fehlerausgabe gepackt.

PHP-Code:
// Suchmuster festlegen
$regex[Nr]='/^(([1-9][0-9]{1,4}[a-z]?)?((\/|-)[1-9][0-9]{1,4}[a-z]?)?){0,1}$/';

if (!
eregi('$regex'$_POST['Nr']))
{
 echo 
'Fehler: Ihre Eingabe entspricht nicht dem zulässigen Muster!';
}
else { echo 
'Nr.: '.$_POST['Nr']; } 
Und es lässt auch alle meine erlaubten Varianten durch.

Ok 1- oder -2 werden ebenfalls akzeptiert, aber wie das zu unterbinden ist bin ich noch nicht hintergestiegen.

Evtl. kann mir ja einer auf die Sprünge helfen.
Mit Zitat antworten
  #4  
Alt 06.06.2010, 01:31:49
Benutzerbild von The Serious Sam
The Serious Sam The Serious Sam ist offline
Junior Member
 
Registriert seit: Mar 2007
Beiträge: 202
AW: Frage zu einem regulären Ausdruck für Straßennamen(inkl. Hausnummer)!

Code:
[1-9][0-9]*[a-z]?(\s*(\/|-)\s*[1-9][0-9]*[a-z])?
habe ihn leider nicht testen können, sollte dennoch stimmen.

es sollten folgende eingaben klappen

1
13
12a
12a - 12b
13 - 15c
12- 14

die leerzeichen werden im reges durch \s* ermöglicht.
der eine gibts so, der andere so ein.
__________________
Ein guter Freund würde dich aus dem Knast holen.

Dein bester Freund würde neben dir sitzen und sagen, verdammt war das geil.
Mit Zitat antworten
  #5  
Alt 06.06.2010, 13:39:18
KeinenPlan KeinenPlan ist offline
Anfänger
 
Registriert seit: Jan 2009
Alter: 45
Beiträge: 57
AW: Frage zu einem regulären Ausdruck für Straßennamen(inkl. Hausnummer)!

Vielen Dank Sam!

Jetzt läuft's genau, wie es gedacht war.
Mit Zitat antworten
  #6  
Alt 09.06.2010, 22:30:50
KeinenPlan KeinenPlan ist offline
Anfänger
 
Registriert seit: Jan 2009
Alter: 45
Beiträge: 57
AW: Frage zu einem regulären Ausdruck für Straßennamen(inkl. Hausnummer)!

Als nächstes hatte ich mich an einem Kontaktformular versucht, wo der eigentlich Mailtext durch den User eingegeben wird.

Dazu hab ich die RegExp welche ich für die Kontrolle von Vor+Nachname werwendet hab
Zitat:
$regex_nName='/[A-Za-züöäâáàêéèîíìôóòûúùÜÖÄÂÁÀÊÉÈÎÍÌÔÓÒÛÚÙß \-]{2,100}/';
auf den Mailtext angepasst.
Zitat:
$regex_Message='/[A-Za-züöäâáàêéèîíìôóòûúùÜÖÄÂÁÀÊÉÈÎÍÌÔÓÒÛÚÙß0-9 @€\*\_\.\-\&\"\+\/\%\§\!\$\<\>\(\)\?\,]{2,100}/m';
Doch im Falle der des Mailtextes blockiert er plötzlich zB. Umlaute und das ß.
Dies kann ich aber an der Stelle nicht nachvollziehen!

Schließlich sind beide RegExp diesbzgl. identisch und müssten hier ein gleiches Verhalten zeigen, oder?

Nachfolgend noch mal die wesentlichen Codepassagen:
PHP-Code:
<?php
if($_POST['SubmitKontaktForm'])

  
$regex_Message='/[A-Za-züöäâáàêéèîíìôóòûúùÜÖÄÂÁÀÊÉÈÎÍÌÔÓÒÛÚÙß0-9 @€\*\_\.\-\&\"\+\/\%\§\!\$\<\>\(\)\?\,]{2,100}/m';
  
$content=$_POST['Nachricht'];

    
//Kontrollvariabeln
  
$fehler='0'
  
$fehler7='0';
  
$fehler8='0';

  if(empty(
$content)) 
  { 
    
$fehler='1'$fehler7='1'
  }
  if((!empty(
$content)) AND (!preg_match($regex_Message$content)))
  { 
   
$fehler='1'$fehler8='1'
  }
}
?>
Hier noch eben in verkürzter form das Formular:
HTML-Code:
<form name="getcontact" method="post" action="kontakt_action.php"> 
<table border="0" cellpadding="0" cellspacing="0" width="548" align="center" bgcolor="#99CCFF">
     <td width="10"><font size="2" face="Arial, Helvetica, sans-serif">Nachricht:&nbsp;<b>*</b></font></td>
     <td ><font face="Arial, Helvetica, sans-serif" size="2"><b><textarea name="Nachricht" rows="4" cols="60"></textarea></b></font></td>
    </tr>
    <tr valign="top"> 
      <td><font face="Arial, Helvetica, sans-serif" size="2"><input type=Submit value="Abschicken" name="SubmitKontaktForm"></font></td>
   </tr>
 </table>
</form>
Kann mich der wer aufklären?
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
regulärer Ausdruck - Frage nivram PHP für Fortgeschrittene und Experten 1 15.04.2006 00:46:25
Regulären Ausdruck formulieren jan84 PHP Grundlagen 9 13.09.2005 14:48:16
Problem mit einem Regulären Ausdruck Wauzy PHP für Fortgeschrittene und Experten 10 23.03.2004 19:41:07
Regulären Ausdruck öfter auf einen String anwenden Wauzy PHP für Fortgeschrittene und Experten 5 17.02.2004 18:17:00
nach Leerzeicehn in einem Regulären ausdruck suchen #0099FF PHP für Fortgeschrittene und Experten 3 14.12.2003 19:19:01


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:55:03 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt