zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden RegEx funktioniert nicht

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 15.05.2010, 15:46
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 12.07.2009
Beiträge: 969
rs-web befindet sich auf einem aufstrebenden Ast
Standard RegEx funktioniert nicht

Hi, ich hab hier Mal ein Problem mit RegEx. Ich habe ein Suchmuster das nach Sonderzeichen sucht. Aber wenn im Namen nun einÖ vorkommt, kommt trotzdem true raus. Hier Mal die Funktion:
PHP-Code:
function usernameWritingCheck($username){
    if(
strlen($username) > 15){
        
$zulang true//Ja, er ist zu lang.
    
}
    else{
        
$zulang false;//Nein, er passt.
    
}
    
$muster "/[äöü\-@!éèà$%&\.\,\?\*\+\^\$\(\)\[\]]/"//Liste der Verbotenen Zeichen
    
if(preg_match($muster$username)){
        
$verbotenesZeichen true//Verbotenes Zeichen gefunden
    
}
    else{
        
$verbotenesZeichen false//Alles Ok
    
}
    if(
$zulang == true){
        return 
false;
    }
    elseif(
$verbotenesZeichen == true){
        return 
false;
    }
    else{
        return 
true;
    }

Wenn der String länger als 15 Zeichen ist, kommt false zurück. Wenn jetzt aber "Benutzernamö" eingegeben wird, passiert nichts. Ich habe mir die Doku schon angesehen aber habe keinen Fehler finden können. Danke schon Mal.
LG rs-web
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 15.05.2010, 19:08
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 30.07.2003
Beiträge: 179
Karlo wird schon bald berühmt werden
Standard

Hi,

der Modifikator (s|i|U) ist dein Freund...
__________________
Gruss Karlo
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 15.05.2010, 19:56
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 12.07.2009
Beiträge: 969
rs-web befindet sich auf einem aufstrebenden Ast
Standard

Hi, danke es sieht jetzt wiefolgt aus:
PHP-Code:
function usernameWritingCheck($username){
    if(
strlen($username) > 15){
        
$zulang true//Ja, er ist zu lang.
    
}
    else{
        
$zulang false;//Nein, er passt.
    
}
    
$muster "/[äöü\-@!éèà$%&\.\,\?\*\+\^\$\(\)\[\]]/siU"//Liste der Verbotenen Zeichen
    
if(preg_match($muster$username)){
        
$verbotenesZeichen true//Verbotenes Zeichen gefunden
    
}
    else{
        
$verbotenesZeichen false//Alles Ok
    
}
    if(
$zulang == true){
        return 
false;
    }
    elseif(
$verbotenesZeichen == true){
        return 
false;
    }
    else{
        return 
true;
    }

Aber es funktioniert immer noch nicht.
Danke schon mal
Mit Zitat antworten
  #4 (permalink)  
Alt 16.05.2010, 00:10
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Du hast einen recht umständlichen Codestil, das geht viel kürzer und sehr viel verständlicher:
PHP-Code:
function usernameWritingCheck($username)
{
    if (
strlen($username) > 15) {
        
// Ja, er ist zu lang.
        
return false;
    }
    
// Liste der Verbotenen Zeichen
    
$muster "/[]äöü@!éèà$%&.,?*+^()[-]/iU";
    if (
preg_match($muster$username)) {
        
// Verbotenes Zeichen gefunden
        
return false;
    }
    return 
true;

Noch besser wird es, wenn du deutsch und englisch nicht mischst.

Der PHP-Code ist funktional identisch mit deinem, auch den regulären Ausdruck habe ich nur aufgeräumt (und den überflüssigen Modifikator "s" wieder rausgeschmissen). Die Funktion tut genau das was sie vermutlich soll, wenn der Name Ok ist gibt sie true zurück, ansonsten false.

Du solltest generell deinen Ansatz überdenken und statt auf verbotene Zeichen lieber prüfen, ob nur erlaubte verwendet wurden. Trotz deiner Prüfung sind immer noch eine Menge von Sonderzeichen möglich (keine Ahnung ob das so von dir gewollt ist.
Mit Zitat antworten
  #5 (permalink)  
Alt 16.05.2010, 11:04
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 12.07.2009
Beiträge: 969
rs-web befindet sich auf einem aufstrebenden Ast
Standard

Hi,
also ich hab das Mal 1:1 kopiert, doch es klappt nicht. Wenn ich "Benutzernamö" eingebe gibt er true zurück. Wenn ich jetzt aber "Benutzernameeeeee" eingebe gibt er false zurück. Ich dachte man kann mit regEx nur Blacklists erstellen, weil der User muss ja z.B. keine Großbuchstaben verwenden. Es soll aber, wenn z.B. ein "@" vorkommt eine Fehlermeldung geben. Ich hoffe ihr wisst was ich meine..
LG rs-web
Mit Zitat antworten
  #6 (permalink)  
Alt 16.05.2010, 11:25
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 12.07.2009
Beiträge: 969
rs-web befindet sich auf einem aufstrebenden Ast
Standard

Irgendwie kapier ich das nicht mehr. Ich habe die Funktion wiefolgt geändert:
PHP-Code:
function usernameWritingCheck($username)
{
    if (
strlen($username) > 15) {
        
// Ja, er ist zu lang.
        
return false;
    }
    if (
strlen($username) < 4) {
        return 
false;
    }
    
// Liste der Verbotenen Zeichen
    
$muster "/[]äöü@!éèà$%&.,?*+^()[-]/iU";
    if (
preg_match($muster$username)) {
        
// Verbotenes Zeichen gefunden
        
return false;
    }
    return 
true;

Wenn der Name "Bei" lautet wird false zurückgegeben, bei "Beö" true. Das kapier ich nicht mehr.
Mit Zitat antworten
  #7 (permalink)  
Alt 16.05.2010, 12:23
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Zitat:
Zitat von rs-web Beitrag anzeigen
also ich hab das Mal 1:1 kopiert, doch es klappt nicht. Wenn ich "Benutzernamö" eingebe gibt er true zurück.
Wie testest du das?

Das hier:
PHP-Code:
<?php

function usernameWritingCheck($username)
{
    if (
strlen($username) > 15) {
        
// Ja, er ist zu lang.
        
return false;
    }
    
// Liste der Verbotenen Zeichen
    
$muster "/[]äöü@!éèà$%&.,?*+^()[-]/iU";
    if (
preg_match($muster$username)) {
        
// Verbotenes Zeichen gefunden
        
return false;
    }
    return 
true;
}

var_dump(usernameWritingCheck('Benutzernamö'));
ergibt bool(false).

Ich vermute du hast ein Zeichenkodierungsproblem. Woher kommen deine Daten? Testest du das schon mit einem Formular? Lass dir mal ausgeben was genau im PHP-Skript ankommt.

Zitat:
Zitat von rs-web Beitrag anzeigen
Ich dachte man kann mit regEx nur Blacklists erstellen, weil der User muss ja z.B. keine Großbuchstaben verwenden. Es soll aber, wenn z.B. ein "@" vorkommt eine Fehlermeldung geben. Ich hoffe ihr wisst was ich meine..
Das geht sogar noch viel besser über den umgekehrten Weg, indem du mit deinem regulären Ausdruck nur testest ob der Benutzername deinen Kriterien entspricht, zum Beispiel so:
PHP-Code:
function usernameWritingCheck($username)
{
    if (
preg_match('/^[a-z0-9]{4,15}$/i'$username)) {
        return 
true;
    }
    return 
false;

Hier wären zum Beispiel alle Buchstaben von A - Z und alle Zahlen erlaubt, der Benutzername muss zwischen 4 und 15 Zeichen lang sein.
Mit Zitat antworten
  #8 (permalink)  
Alt 16.05.2010, 12:37
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 12.07.2009
Beiträge: 969
rs-web befindet sich auf einem aufstrebenden Ast
Standard

Hi,
ja ich teste schon mit einem Formular. Vielen Dank mit der letzten Funktion klappt alles wunderbar. Wie es scheint, muss ich mich mit RegEx erst noch anfreunden
LG rs-web
Mit Zitat antworten
Antwort

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mouseover funktioniert nicht (externe Methode) blackhtml CSS 2 07.04.2009 17:49
RegEx funktioniert, aber eigentlich auch nicht - warum? Boris Serveradministration und serverseitige Scripte 2 04.10.2007 12:47
dtd und css in php funktioniert im IE nicht!!! da-lick CSS 17 09.06.2007 15:44
Regex Problem ("]" killt die regex) psycho_dmr Serveradministration und serverseitige Scripte 7 29.04.2007 16:49
hier eine leichte: regex über seite bauen bernard_hinault CSS 13 01.09.2006 20:33


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:41 Uhr.