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 ::

TYPO3 Kochbuch

TYPO3 Kochbuch 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 für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 05.07.2012, 02:15:44
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
Regex für ein Namensfeld

Grundlage: Es handelt sich um ein lokales Projekt. Somit würde eigentlich eine Prüfung auf ein leeres Feld reichen. Allerdings kenne ich meine Pappenheimer und möchte in einer Formularauswertung zumindest verhindern, dass absoluter Müll erfasst wird.
Asiatische oder kyrillische Sonderzeichen kann und will ich ausschliessen.

Mein Code
PHP-Code:
//$ansprechpartner ist das entsprechende Formularfeld, welches einen Namen beinhaltet
if(!preg_match('/[^a-z üÜäAöÖß-]/i'$ansprechpartner)){
    
$this->setAnsprechpartner($ansprechpartner);
} else {
    
$this->setErrorMsg('Es wurden ungültige Zeichen im Namen verwendet.');

Soweit funktioniert alles auch wie gewüscht.

Einziges Problem: Dr. oder Hr. bzw. Fr. ruft setErrorMsg auf, da der Punkt nicht im preg_match vorkommen darf.

Erweitere ich das Pattern um den Punkt(einfach einen . hinter - gesetzt), bekomme ich eine Fehlermeldung
Zitat:
Warning: preg_match() [function.preg-match]: Compilation failed: range out of order in character class at offset 20 in C:\xampp\htdocs\echtbetrieb\application\model\wartung\validform.php on line 51
Ich gebe zu. Regexp sind für mich bömische Dörfer.
Kann mir jemand helfen den Punkt im String doch noch zu erlauben?
Mit Zitat antworten
  #2  
Alt 05.07.2012, 11:19:56
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: Regex für ein Namensfeld

Hast Du es mal mit escapen (\.) versucht!?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #3  
Alt 05.07.2012, 19:23:08
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: Regex für ein Namensfeld

Zitat:
Zitat von vt1816 Beitrag anzeigen
Hast Du es mal mit escapen (\.) versucht!?
Nein. Hab es aber gleich mal getestet. Klang auch logisch.

Pattern: '/[^a-z üÜäAöÖß-/.]/i' bringt
Zitat:
Warning: preg_match() [function.preg-match]: Unknown modifier '.' in C:\xampp\htdocs\echtbetrieb\application\model\wartung\validform.php on line 95
Pattern: '/[^a-z üÜäAöÖß-\.]/i' bringt die ursprüngliche Fehlermeldung.

ABER: '/[^a-z \.üÜäAöÖß-]/i' führt zum gewollten Ergebnis.

Offenbar mag es preg_match nicht, wenn ein Punkt am Ende steht. Wird am Ende vermutlich nicht als Suchzeichen sondern anderweitig interpretiert.
Wäre somit nur noch interessant, wieso es nicht am Ende stehen darf.

Der Vollständigkeitshalber:
PHP-Code:
if(!preg_match('/[^a-z \.üÜäAöÖß-]/i'$ansprechpartner)){
                
$this->setAnsprechPartner($ansprechpartner);
            } else {
                
$this->setErrorMsg('Ungültige Zeichen im Namen<br />');
            } 
Führt die Methode setAnsprechPartner() aus, wenn nur die im Suchmuster verwendeten Zeichen im String enthalten sind. Das Suchmuster sollte auf KEINEN Fall verwendet werden, wenn man andere Namen erwarten muss als sie in Deutschland üblich sind.
Grieschische, französische und andere Sprachen mit Sonderzeichen im Namen würden einen Fehler werfen.
Der Bindestrich dient der Behandlung von Doppelnamen und der Punkt lediglich um Titel bzw. das Geschlecht mit reinschreiben zu können.
Letzteres würde ich bei einem wichtigeren Formular eher mit einem extra Formularfeld umsetzen.
Mit Zitat antworten
  #4  
Alt 06.07.2012, 14:00:22
Xor Xor ist offline
Anfänger
 
Registriert seit: Aug 2008
Alter: 35
Beiträge: 124
AW: Regex für ein Namensfeld

Hi,

Zitat:
Offenbar mag es preg_match nicht, wenn ein Punkt am Ende steht. Wird am Ende vermutlich nicht als Suchzeichen sondern anderweitig interpretiert.
Glaube das nicht ganz. Denke eher, dass ihm dein "ß-\." am Ende, speziell das "-" gestört hat.
Zumindest würde es erklären warum zu beginn "a-z" => "a bis z" entspricht, allerdings "ß bis ." keinen Sinn macht. Auch deine Fehlermeldung
Zitat:
... Compilation failed: range out of order in character class ...
würde dazu passen.

Um einen Bindestrich auch zu erlauben/verbieten solltest du ihn vielleicht auch escapen ("\-"), bin mir aber nicht sicher ob es notwendig ist.

Lg
__________________
Allergisch auf:
  • "Ich brauch ein Script für..."
  • "...dringend..."
  • Anfrage-->Antwort-->Nie wieder melden
Mit Zitat antworten
  #5  
Alt 12.07.2012, 16:08:50
misterunknown misterunknown ist offline
Anfänger
 
Registriert seit: Mar 2010
Alter: 33
Beiträge: 21
AW: Regex für ein Namensfeld

PHP-Code:
<?php
$string 
"Fr. Dr. Hubert";

if(
preg_match('/[^a-zA-Z\süÜäAöÖß\-\.]/i'$string)){
echo (
"Fehler");}
else{ echo(
"Korrekt.");}

?>
Logik: WENN ein Zeichen in dem String ist, was NICHT reingehört, gebe einen Fehler aus. Ansonsten ist der String korrekt.

Beachte, dass ich vor dem preg_match das ! weggelassen habe.
Mit Zitat antworten
  #6  
Alt 14.07.2012, 13:56:10
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Regex für ein Namensfeld

Zitat:
Zitat von Xor Beitrag anzeigen
bin mir aber nicht sicher ob es notwendig ist.
Na klar muß das so sein. - hat in Zeichenklassen die "von bis" Funktion. Und wenn man nur das Zeichen möchte, muß man es escapen.
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
Filenames via Regex analysieren & files löschen fips PHP Grundlagen 1 06.03.2011 15:11:37
Regex für e-mail oder php filter verwenden? R4Zz0R PHP Entwicklung und Softwaredesign 0 26.12.2010 03:15:06
IP regex Prokonskull PHP Grundlagen 7 02.11.2009 16:39:32
RegEx aber wie ? yozek PHP für Fortgeschrittene und Experten 3 03.11.2004 14:58:06
regex problem - und/nicht |Coding PHP für Fortgeschrittene und Experten 2 01.08.2003 15:03:59


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:37:37 Uhr.


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


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