# Sonderzeichen --> Überprüfen



## putzi (28. August 2006)

Hallo!

Ich möchte den Benutzernamen des Users auf Leerzeichen, Sonderzeichen, und Umlaute überprüfen.

Wie mache ich das?


----------



## Sir Robin (28. August 2006)

für solche Stringüberprüfungen machen sich reguläre Ausdrücke immer recht gut. Du könntest zwar mit strpos prüfen ob die jeweiligen Zeichen vorkommen, aber bei der Menge an Zeichen ist das zum Einen ein viel zu großer Aufwand und zum Anderen auch noch langsam.

ein kleines Beispiel (allerdings nur für Umlaute, aber für den Ansatz reichts, sollst ja was lernen ):


```
<?php

$string  = 'Das ist ein String mit einigen sehr schönen und gängigen Umlauten.';
$pattern = '#[äöü]#';

if( preg_match($pattern, $string) ) {
    // Sonderzeichen drin
}

?>
```

näheres findest unter http://www.php.net/preg_match


----------



## putzi (28. August 2006)

Danke, funktinoniert!


----------



## Gumbo (28. August 2006)

Bestimme lieber die Gruppe der erlaubten Zeichen als die der nicht erlaubten Zeichen:
	
	
	



```
preg_match('/[^a-zA-Z…]/', $string)
```


----------



## Online-Skater (4. September 2006)

Ich wüsste gern wie man das anwendet  


```
if (!preg_match('/[^0-9a-zA-Z]([-_.]?[0-9a-zA-Z])/', $_POST['user'])) $error .= '<li>Der Benutzername enth&auml;lt Sonderzeichen</li>';
```

Das funktioniert nicht.
Nutzernamen dürfen aus folgenden Zeichen bestehen: [a-zA-Z0-9-_.] 

Der sagt mir bei dem Code das: "test" Sonderzeichen enthält.  

Thx 4 help


----------



## King of Darkness (4. September 2006)

Online-Skater hat gesagt.:
			
		

> Ich wüsste gern wie man das anwendet
> 
> 
> ```
> ...



die regel ist lediglich etwas falsch


```
if (!preg_match('/[0-9a-zA-Z-_.]/', $_POST['user'])) $error .= '<li>Der Benutzername enth&auml;lt Sonderzeichen</li>';
```

versuch das mal
mit dem dach (^) hast du ihm gesagt das diese zeichen nicht vorkommen sollen


----------



## Maik (4. September 2006)

@ King of Darkness: bitte achte in Deinen Beiträgen auf Groß- und Kleinschreibung, siehe hierzu auch die Netiquette Nr.15.


----------



## Online-Skater (4. September 2006)

Danke zumindest funktioniert der Benutzername: "test" jetzt, genau genommen geht alles solange man als Benutzername nicht *NUR* Sonderzeichen nimmt.
Das heißt Sinn verfehlt  

Es geht nicht: ########  -> richtig
Es geht aber: bla##### ->falsch

Also sobald ein erlaubtes Zeichen drin ist, ist alles in Ordnung aber es soll ja umgekehrt laufen, sobald ein Sonderzeichen drin ist, soll es angezeigt werden.


----------



## Gumbo (4. September 2006)

Du hättest doch einfach nur meinen Vorschlag anpassen müssen:
	
	
	



```
preg_match('/[^a-zA-Z0-9-_.]/', $string)
```


----------



## Online-Skater (4. September 2006)

Vielen Dank

leider kenne ich mich mit preg_match garnicht gut aus, gibt es auch ne deutsche Erklärung und vor allem Übersichtlichere Darstellung folgender Seite: pattern

Danke.


----------



## campari (3. Dezember 2006)

Gumbo hat gesagt.:


> Du hättest doch einfach nur meinen Vorschlag anpassen müssen:
> 
> 
> 
> ...




Wie kann ich damit eine Zeichenbegrenzung von sagen wir 5 bis 50 zeichen erreichen?

So funktionierts schonmal net:

```
preg_match('/[^a-zA-Z0-9-_.]{5,50}/', $name))
```


----------



## Da Hacker (3. Dezember 2006)

Hi campari,

kannst du das nicht mit einer IF-Abfrage machen, in der du den String abfragst?

```
if( strlen( $string ) < 50 && strlen( $string ) > 5 )
{
 //String zwischen 5 und 50 Zeichen lang
}
else
{
 //String NICHT zwischen 5 und 50 Zeichen lang
}
```


----------



## campari (3. Dezember 2006)

Eigentlich ist das mit preg_match ja möglich, aber ich kriegs einfach nicht hin.
Verwende jetzt strlen (wieder eine if-Schleife mehr:/). Vielleicht ist ja jemand geschickter als ich und hat eine Idee.

Grüsse


----------



## Gumbo (3. Dezember 2006)

Bei einem regulären Ausdruck müsste es wie folgt aussehen:
	
	
	



```
!preg_match('/^[a-zA-Z0-9-_.]{5,50}$/', $string)
```


----------



## proloser (3. Dezember 2006)

Hallo,

genau das hab ich gesucht!
Ich möchte noch damit in meinem Formular keine Leerzeichen möglich sind!

Wie stell ich das am besten an?

MfG proloser


EDIT:

Funktioniert eigentlich aber nur so ...


```
preg_match('/[^a-zA-Z]/', $string)
```

{5,50} <-- Funktioniert bei mir nicht wirklich!


----------



## Online-Skater (3. Dezember 2006)

Hab es jetzt so und funktioniert auch


```
if (!preg_match('!^([\w]*([-_.\s])?[\w]*){5,50}$!',trim($_POST['user']))) $error .= '<li>Der Benutzername enth&auml;lt Sonderzeichen oder ist zu lang/kurz (5 - 50)</li>';
```


----------



## RS9999 (3. Dezember 2006)

Glaube Du hast Gumbos Vorschlag falsch verstanden!

preg_match('/^[a-zA-Z0-9-_.]{5,50}$/', $string) // gibt den Integerwert 0 oder 1 zurück!

Also musst Du nur noch prüfen!

Beispiel:


```
$string = "TESTEN"; //Stinglänge 6
$pruefe = preg_match('/^[a-zA-Z0-9-_.]{5,50}$/', $string);
if($pruefe == 1)
{
echo "Alles OK!";
}
else
{
echo "Falsche Angaben!";
}
```


----------



## proloser (8. Dezember 2006)

Hallo,

ich überprüfe mein Formular so ...


```
if(!preg_match("/[^a-zA-Z-ÖöÄäÜüéß ]{1,2}/", $_POST['submit_name'])) { 
  $form_check = "false";
}
```

Es funktioniert eigentlich ganz gut nur ist es möglich einfach das Feld leer zu lassen, muss ich da extra noch mit "empty()" überprüfen? 

Mit {1,2} dürfte nichts eingeben eigentlich gar nicht möglich sein oder?

MfG


----------

