php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.09.2006, 12:21  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard einfachere lösung für regex als meine variante?

Code:
$marke = "Quißck";
$modell = " äüö Super Learner";
um nun alle sonderzeichen und leerräume zu entfernen habe ich folgende regex erstellt:
Code:
ereg_replace('[^a-zA-Z0-9]', '', $marke.$modell)
der hintergrund ist, dass ich aus diesen beiden variablen einen ordner erzeugen lasse.

wenn ich jetzt die leerzeichen in _ formatiert haben will muss ich das seperat machen und kann das nicht mit vorheriger abfrage kombinieren oder?

wenn ich das ganze dann auch noch klein haben möchte werde ich das dann wohl so "unschön" machen müssen oder?
Code:
strtolower(str_replace(' ', '_', ereg_replace('[^a-zA-Z0-9 ]', '', $marke.$modell)))
Promaetheus ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 05.09.2006, 13:08  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Boah, hast du Probleme! *g

Ich wette, du kannst das alles auch einen regulären Ausdruck packen, aber wozu?

Ersetze einfach das ereg_replace() durch preg_replace(), mach vielleicht drei Zeilen draus und dann passt doch alles. Man kann mit einem Blick und ohne Kommentare verstehen, was du da machst.

Wenn du Lustig bist, kannst du preg_replace() auch Arrays übergeben, siehe Manual. Aber das ist vermutlich weder besser lesbar noch schneller.

Basti

PS:
Soll nicht blöd rüberkommen, meine erste Zeile oben, aber das ist doch echt so ein unwichtiger Kleinkram, über den lohnt es doch nicht, auch nur einen Gedanken zuviel aufzuwenden (auch, wenn ich hier wohl gerade auch nichts anderes gemacht habe *g).
Basti ist offline  
Alt 05.09.2006, 14:37  
Erfahrener Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 1.333
Freeaak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
preg_replace("~\W~","",$marke); 
müsste doch auch gehen oder?
__________________
"Wenn du nicht weißt, was du tust: Machs mit Eleganz!"

(Murphy's Gesetze)
Freeaak ist offline  
Alt 05.09.2006, 14:40  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

bin jetzt kein freak und weiss nicht was genau die ~ machen, aber /w sind alle alphanumerischen zeichen. also auch ßöäü und die machen sich als ordnernamen nicht so gut.

aber ich werde wie basti schon gesagt hat nicht mehr zeit dafür verschwenden. funzen tut es so jetzt ja auch. bin eben ein fan von schönen codes. ;o)
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 05.09.2006, 15:03  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

is doch chic ^^
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 05.09.2006, 22:02  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Zitat:
Zitat von Promaetheus
bin jetzt kein freak und weiss nicht was genau die ~ machen
Sind einfach die Begrenzer.

Zitat:
aber /w sind alle alphanumerischen zeichen. also auch ßöäü und die machen sich als ordnernamen nicht so gut.
Die fallen aber nicht unter die Menge \w.

Zitat:
bin eben ein fan von schönen codes. ;o)
...ich auch. Und ich halte mich auch gerne an solchen Geschichten auf - aber das fällt dann eher unter den Begriff "Lernen" und in der Arbeit lass ich sowas in der Regel und mach mir ggf. eine Notiz.

Also hier mal alles in einem Ausdruck. Aber, wie bereits geahnt: Deine erste Lösung ist einiges leichter lesbar und das ist ja auch ein wichtiger Bestandteil der Ästhetik eines Codes, oder? Und, langsamer ist es durch die Callback-Funktion garantiert.

PHP-Code:
preg_replace(array('| |''|\W|''|(\w)|e'), array('_'''"strtolower('\\1')"), $s); 
Basti
Basti ist offline  
Alt 05.09.2006, 23:06  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

hmpf... dann stimme ich dir zu. die erste version ist in der tat schöner und noch wichtiger: verständlicher. zumal ich eben kein profi in sachen regex bin.

aber danke für die hilfe und den hinweis. ich lerne ja gerne. ;o)

was meinst du mit folgender aussage?
Zitat:
Zitat von Basti
Zitat:
aber /w sind alle alphanumerischen zeichen. also auch ßöäü und die machen sich als ordnernamen nicht so gut.
Die fallen aber nicht unter die Menge \w.
/w zeigt ja alle alphanumerischen zeichen an. da gehören doch auch ßöäü_- dazu oder? hab das mal probiert und die sind bei mir schon dabei, sprich die werden in der abfrage akzeptiert.
Promaetheus ist offline  
Alt 05.09.2006, 23:59  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Huch? Bei mir nicht (PCRE-Lib 6.4 05-Sep-2005).

Weil ich grad Feierabend hab: *g
PHP-Code:
<?php

// Umlauts defined in html entities to avoid charset mixups
$aTestValues = array(
    
'a'      => 'a',
    
'O'      => 'o',
    
'0'      => '0',
    
'&auml;' => '',
    
'&szlig;' => '',
    
' '      => '_'
);

$aCharsets   = array('UTF-8''ISO-8859-1');

function 
substitute($s)
{
    return 
preg_replace(array('| |''|\W|''|(\w)|e'), array('_'''"strtolower('\\1')"), $s);
}

test($aTestValues$aCharsets);
exit;


function 
test($aTestValues$aCharsets) {

    echo 
'<pre>';

    foreach (
$aTestValues as $sTestValue => $sExpRetVal) {

        foreach (
$aCharsets as $sCharset) {

            
$sTestName "'$sTestValue' ($sCharset)";

            
$sTestValue mb_convert_encoding(
                
$sTestValue,
                
$sCharset,
                
'HTML-ENTITIES'
            
);

            
assertEqual($sTestNamesubstitute($sTestValue), $sExpRetVal);
        }
    }
    echo 
'</pre>';
}

function 
assertEqual($sMessage$mVal1$mVal2)
{
    print 
$mVal1 === $mVal2 'passed' 'failed';
    echo 
': '$sMessage"\n";
}
?>
Ist bei mir alles okay. Auch wenn die Testfälle natürlich nicht vollständig sind (aber wann sind die das schon).

Basti
Basti ist offline  
Alt 06.09.2006, 10:11  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

also ich hab das mal ganz einfach so probiert. '/W' heisst ja alle nicht alphanumerischen zeichen:
Code:
$marke = "Quißck";
$modell = " äüö Super Learner 1234 xyz";


echo $marke.$modell;
echo ereg_replace('/W', 'X', $marke.$modell);
ergibt folgende ausgabe:
Zitat:
Quißck äüö Super Learner 1234 xyz
aber es sollten eigentlich doch nur mehr die alphanumerischen zeichen angezeigt werden oder? /w = alle alphanumerischen zeichen /W alle NICHT alphanumerischen zeichen. ?!?
Promaetheus ist offline  
Alt 06.09.2006, 10:34  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi.

Wahrscheinlich verhält sich ereg_replace() da anders, als preg_replace(). Die ganzen ereg-Funktionsn sind in der Regel langsamer, bieten weniger Features, sind nicht binary safe und sollten nicht mehr verwendet werden.

Was gibt denn der Test-Code von mir oben bei dir aus?

Basti
Basti ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Array sortieren mit regex Lupi PHP Tipps 2008 3 21.07.2008 15:17
Regex: Auslesen der Meta-Tags einer Webseite Sucheingrenzung pepe24 PHP Tipps 2008 12 31.05.2008 15:41
2 Regex in PHP kompatible Syntax übersetzen NoiZy PHP-Fortgeschrittene 6 07.04.2008 09:04
Regex Link Problem Broadcast PHP Tipps 2008 2 29.02.2008 16:30
[gelöst :D ] regex tuts nur einmal pro zeile notyyy PHP Tipps 2008 17 24.09.2007 15:40
RegEx für Mail-Adresse (Bitte prüfen!) vollkommenegal PHP Tipps 2006 13 20.11.2006 20:02
REGEX - Alles zwischen '' außer \' stefanjann PHP-Fortgeschrittene 7 06.04.2006 12:59
habe ein paar fragen zu REGEX imported_kremser PHP Tipps 2006 11 31.01.2006 15:30
RegEx findet Stringvorkommen nicht PHP Tipps 2007 6 08.12.2005 21:52
[Erledigt] Regex Problem. PHP Tipps 2007 14 07.11.2005 15:24
Allgemeine RegEx Frage PHP Tipps 2005-2 10 05.07.2005 13:43
Mit RegEx auslesen - Hilfe beinm RegEx Monty77 PHP-Fortgeschrittene 6 09.06.2005 14:34
RegEx? DerDesian PHP Tipps 2005 2 08.03.2005 12:57
Anker Links parsen (RegEx) Spyker PHP Tipps 2005 1 31.01.2005 12:01
Regex für attribute in quelltexten robo47 PHP Tipps 2005 6 27.01.2005 18:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
regex erste lösugn, alphanumerische ordnernamen, php alphanumerische zeichen testen, reguläre ausdrücke php, meine variante, [:alpha:] regexp äüö

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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.