PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ereg alphanumerisch



BlueJay
11-10-2007, 05:56
Hallo Leute,

bei dem Problem, Eingaben alphanumerisch zu filtern, bin ich auf Folgendes gestoßen:

ereg sollte so rein theoretisch länderspezifisch sein. Das habe ich irgendwie nicht hinbekommen! Der hat sich ums Verrecken nicht um Umlaute geschert (und sie mit ausgefiltert)!

funktionierendes preg:

$my_text=preg_replace("/[^A-Za-z0-9öüäÄÖÜß-\s]/","",$my_text);

nicht funktionierendes ereg:

$sdes=ereg_replace("[^[:alnum:]]","",$sdes);

Codepage des Editors und der Formular-Site stimmen überein (cp-1252)/(sonst knallt es auch im preg)
Server: Solaris 9/10, php 4.4.7
Client/Editor: gentoo 2.6.22

Was habe ich am ereg nicht verstanden?

so long,
BlueJay

jan61
11-10-2007, 21:53
Moin,

ich glaube, dass eher "[:alnum:]" das Problem ist. Das beinhaltet IMHO nur "a-zA-Z0-9_". Und noch eine Frage: Was bezweckst Du mit "ß-\s"? Alles zwischen "ß" und Leerzeichen oder Tab zulassen? Oder willst Du nur "-" und Whitespaces zulassen? Dann solltest Du das "-" IMHO immer nur ans Ende setzen, sonst bezeichnet es eine Range.

Dieser Ausdruck funktioniert bei mir:
print ereg_replace("[^A-Za-z0-9öüäÄÖÜß \t-]","","a b-c123ABC!äüö<ÄÖÜß>");Jan

EDIT: Natürlich funktionieren auch Zeichenklassen:
print ereg_replace("[^[:alnum:]öüäÄÖÜß \t-]","","a b-c123ABCäüöÄÖÜß!<>");

BlueJay
12-10-2007, 14:22
Mit dem Range hast du natürlich recht, das Blank war kurz vor Feierabend reingerutscht.

Dass :alpha: und :alnum: Umlaute mit einschließt, stand in einem Artikel http://www.linux-user.de/ausgabe/2002/08/074-regexp/regexp-2.html

Hatte mich da wohl zu früh gefreut.

Dass \w Umlaute beinhaltet,steht zur Zeit in der Wikipedia, wird wohl demnächst korrigiert werden ;)
http://209.85.135.104/search?q=cache:mK4ZaDmU5ZUJ:de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck+regex+alpha+umlaute&hl=de&ct=clnk&cd=6&gl=de

Grundsätzlich hatte ich nach einem Ausdruck gesucht, der ungefragt Umlaute mit beinhaltet (länderspezifischer Code), da ich mittlerweile mit 3 Codepages im Editor rumhantiere, von denen nur 2 bei den Umlauten übereinstimmen.

Gibt immer mal böse Überraschungen, wenn ich mit dem falschen Code abspeichere. :o

undefined
12-10-2007, 19:32
Das ist ein utf-8 Problem.
Entweder du Konvertierst utf8_{encode|decode}
Oder setzt das u Modifierflag im Regexp.
http://de.php.net/manual/de/reference.pcre.pattern.modifiers.php

BlueJay
13-10-2007, 13:04
Hm, ist wohl auch noch im Versuchsstadium:

ereg lässt alles durch samt Schlangen und Gartenzäunen, preg mit u ebenfalls.

Ärgernis waren solche Sachen wie Gartenzäune, Schlangen und Satzzeichen im Namen.