| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

17-12-2007, 02:12
|
|
scraddy
Newbie
|
|
Registriert seit: Aug 2006
Beiträge: 7
|
|
[REGEX] umlaute erlauben, POSIX
hallo comm,
ich komme grad echt nicht weiter. ich habe folgendes preg_match:
PHP-Code:
if(preg_match("#[^\\wäüöÄÖÜß\\- ]#i", $_POST['nachname'])){ ... }
damit überprüfe ich eine formulareingabe. ich möchte nur buchstaben, umlaute, -, ß und leertaste erlauben. wenn ich das richtig gemacht habe müsste mir das pattern ja ein vorkommen jedes anderen zeichens finden, richtig?
mein problem sind die umlaute. die werden von dem pattern auch "gefunden".
ich habe schon einige sachen ausprobiert, u.a. das ganze mit POSIX, also mit [[:alpha:]] zu überprüfen. trotz setlocale(LC_ALL, "de_DE") klappt es auch damit nicht. laut PHPinfo ist POSIX bei mir aber enabled.
ich bin etwas ratlos. hatte vielleicht jemand schonmal ähnliche probleme?
gute nacht!  und danke schonmal!
gruß, markus
|

17-12-2007, 02:40
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
\w = any letter or digit or the underscore character
Die Umlaute etc. stecken da also schon mit drin.
|

17-12-2007, 10:37
|
|
scraddy
Newbie
|
|
Registriert seit: Aug 2006
Beiträge: 7
|
|
hm .. ich dachte \w ist eine zeichenklasse für - wie du schreibst - zeichen, ziffern und den unterstrich, aber exklusive ß und umlauten. ich finde da zum beispiel diese quelle.
kann es sein, dass es auf die PHP version ankommt, ob das mit umlauten im Regex funktioniert?
|

17-12-2007, 11:03
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Nein, es kommt aufs Locale an und das setzt du ja auf de_DE.
Ich habe auch eine Quelle: http://php.net/manual/en/function.preg-match.php#49926
Sie bezieht sich zwar auf [:alpha:], aber bestimmt trifft das auch auf \w zu.
Übrigens ist vermutlich dein Editor schuld. Der speichert dein Script bestimmt und UTF-8 und dann soll mit ISO-8859 gematcht werden. Aber das ist wie gesagt alles egal, wenn du die Umlaute gar nicht mehr explizit angibst sondern mit setlocale() und \w arbeitest.
Geändert von onemorenerd (17-12-2007 um 11:07 Uhr)
|

17-12-2007, 11:16
|
|
scraddy
Newbie
|
|
Registriert seit: Aug 2006
Beiträge: 7
|
|
ein test zu [:alpha:]
du hast recht, [:alpha:] berücksichtigt die umlaute und das ß, \w jedoch nicht. ich habe meinen fehler zwar gefunden, aber dennoch möchte ich gerne mal wissen was es mit diesem POSIX [:alpha:] ding auf sich hat.
mein fehler war, dass die kodierung des dokuments in dreamweaver auf westeuropäisch stand und nicht auf UTF-8. damit sollte man wenn man es einmal anfängt ja durchgängig arbeiten. jetzt klappt das ganze, wenn ich die umlaute im REGEX stehen habe.
teste mal folgendes script:
PHP-Code:
<?
header("Content-type: text/html; charset=utf-8");
setlocale(LC_ALL, 'de_DE');
$var = "ÄÖÜäöüMarkuasdasdÄÖÜüüö";
if(preg_match("#[^\\w]#i", $var)){
echo "Umlaute in ".$var." gefunden!";
} else { echo "Keine Umlaute in ".$var." gefunden!"; }
echo "<br />";
if(preg_match("#[^[:alpha:]]#", $var)){
echo "Umlaute in ".$var." gefunden!";
} else { echo "Keine Umlaute in ".$var." gefunden!"; }
?>
ich bekomme beides mal als ausgabe, dass umlaute gefunden wurden, obwohl das zweite pattern ja eigentlich nicht matchen dürfte, da in alpha ja angeblich umlaute berücksichtigt werden.
Geändert von scraddy (17-12-2007 um 11:19 Uhr)
|

17-12-2007, 11:36
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Re: ein test zu [:alpha:]
Sorry, ich bin grad auf'm Sprung. Vielleicht teste ich es heute abend mal, wenn ich zurück bin.
Folgendes will ich aber noch schnell loswerden: \w und :alpha: sind IMHO identisch bzgl. der Umlaute - sowohl vor, als auch nach setlocale(LC_ALL, 'de_DE').
|

17-12-2007, 18:51
|
|
scraddy
Newbie
|
|
Registriert seit: Aug 2006
Beiträge: 7
|
|
ok, also vielleicht irre ich mich ja auch, aber ich bin momentan noch von meiner meinung überzeugt. ich würde mich freuen, wenn du es nachher oder in den nächsten tagen mal testen würdest oder mir ein beispiel gibst, was deine vermutung beweist.
das würde ich wirklich gerne geklärt haben, auch wenn es nichts mehr mit meinem problem zu tun hat, aber das ist ja vielleicht auch für andere interessant.
|

17-12-2007, 19:00
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Hier kannst du die ansehen, was \w bzw. :alpha: alles matcht - bei mir sind das auch die Umlaute.
PHP-Code:
<?php
header("Content-type: text/plain;");
setlocale(LC_ALL, 'de_DE');
$var = "ÄÖÜäöüMarkuasdasdÄÖÜüüö";
preg_match_all("#[\w]#i", $var, $matches);
print_r($matches);
preg_match_all("#[[:alpha:]]#", $var, $matches);
print_r($matches);
?>
|

17-12-2007, 19:11
|
|
scraddy
Newbie
|
|
Registriert seit: Aug 2006
Beiträge: 7
|
|
ok, das ist seltsam. du bekommst also ein array, wo auch die umlaute als einträge drin stehen? ich erhalte beide male dieses array:
PHP-Code:
Array
(
[0] => Array
(
[0] => M
[1] => a
[2] => r
[3] => k
[4] => u
[5] => a
[6] => s
[7] => d
[8] => a
[9] => s
[10] => d
)
)
 liegt's am webspace?! unterschiedliche php konfiguration?
|

17-12-2007, 23:00
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Ja, bei mir stehen auch die Umlaute im Array.
Was gibt setlocale() zurück? Was gibt "locale -a" auf der Konsole aus?
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
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.
HTML-Code ist aus.
|
|
|
|
PHP News
|