# Umlaute in preg_match (REg. Expression) erlauben



## Kai-Behncke (28. Januar 2009)

Hallo liebe Leute,

trotz intensiver Suche konnte ich auch über Google für folgendes Problem keine Lösung finden:


Ich möchte dass bei einer Eingae in einem Namensfeld auch Umlaute (öüä) möglich sind (aber keine Zahlen und Sonderzeichen)

Ein
	
	
	



```
if ($_POST["input_user_vorname"]=='' OR (!preg_match("#^[a-zA-Zöüä]+$#",$_POST["input_user_vorname"])))
```

ergibt zwar ein TRUE bei Zahlen und Sonderzeichen (also genau wie es sein soll), aber leider auch bei ö,ü oder ä.

Ich weiß dass mittels

```
(!preg_match("#^[\w]+$#"
```
 dann
Umlaute akzeptiert werden (aber leider auch Zahlen und best. Sonderzeichen).

Weiß jemand evtl eine Möglichkeit wie das Problem zu lösen ist?
Danke im Voraus, Kai


----------



## Navy (28. Januar 2009)

Versuch mal:

```
^[\W^1-9]*$
```


----------



## Sven Mintel (28. Januar 2009)

Das sollte eigentlich gehen wie du es hast, allerdings trifft dein Ausdruck nur die kleinen Umlaute. Setze die Flag i oder erweitere deine Zeichenklasse um die Grossbuchstaben.



Ansonsten:
den 1. Teil der Prüfung auf die leere Zeichenkette kannst du dir eigentlich sparen, denn der 2. Teil deckt auch dies ab 


```
if (!preg_match("#^[a-zöüä]+$#i",$_POST["input_user_vorname"]))
{
  //Fehler
}
```


----------



## Gumbo (28. Januar 2009)

Du kannst die wunderschönen Ausdrücke für Unicode-Zeicheneigenschaften nutzen:
	
	
	



```
/^[\p{L}\-\s]+$/
```


----------



## Kai-Behncke (28. Januar 2009)

Zunächst erstmal ein Danke für die Mühe, aber weder ein


```
if (!preg_match("#^[\w^1-9]+$#",$_POST["input_user_vorname"]))
```

(es können dann auch Zahlen eingegeben werden)

noch ein


```
if (!preg_match("#^[\W^1-9]+$#",$_POST["input_user_vorname"]))
```


und auch kein


```
if (!preg_match("#^[a-zöüä]+$#",$_POST["input_user_vorname"]))
```


(öüä geben einen Fehler)

und ebensowenig ein:

```
if (!preg_match("/^[\p{L}\-\s]+$/",$_POST["input_user_vorname"]))
```


bringt die Lösung. 

Kann es sein, dass ich vielleicht in der php.ini etwas ändern muss?
So langsam bin ich echt ratlos?
Funktionieren denn die genannten Beispiele bei Euch?

Viele Grüße, Kai


----------



## spikaner (28. Januar 2009)

Also bei mir funktioniert ein einwandfrei

```
if(!eregi("^[a-zA-Z_äöüÄÖÜ]+$",$_POST["vorname"]))
```
gut hier nutz ich eregi aber preg_match sollte auch nichts anderes ausgeben (kannst es ja aber gerne mal testen  )

mfg Spikaner


----------



## Gumbo (28. Januar 2009)

Ach so: Wenn du die Ausdrücke für Unicode-Zeicheneigenschaften nutzen möchtest, müssen die Daten UTF-8-kodiert sein. Doch auch sonst müssen Zeichenkodierung der Daten und des regulären Ausdrucks übereinstimmen.


----------

