suche regexp

P

P_F

Hi, für die Userregistrierung in meinem Skript möchte ich den gewünschten usernamen überprüfen.
Er darf keine Sonder u. Leerzeichen enthalten, außer .-_

Ich bin nun soweit:

PHP:
<?php
function str_has_special_chars($string) {
  if (preg_match("/[^a-zA-Z0-9]/",$string)) 
    return 1;
  else 
    return 0;
}
?>

Wie bringe ich nun mit rein, dass .-_ erlaubt sind?
 
hi.
ich bin auch neu bei der sache.
Aber vielleicht ist es ja so möglich
Code:
<?php 
function str_has_special_chars($string) { 
  if (preg_match("/[^a-zA-Z0-9!-)]/",$string)) 
    return 1; 
  else 
    return 0; 
} 
?>
wenns nicht Funkt weiß ich leider auch nicht weiter :)
sry

Mfg
 
PHP:
function str_has_special_chars($string)
{
	return (bool) preg_match('/[^a-zA-Z0-9._-]/', $string);
}
 
Hey, nun möchte ich alle im Usernamen erlaubten Zeichen in einer Konstante festlegen (Um die Anpassung für den User zu erleichtern).

Also
PHP:
<?
// steht in einer Konfigurationsdatei
define('ALLOWED_CHARS', '._-')

// die funktion
function str_has_special_chars($string,$allowed_chars) {
  if (preg_match('/[^a-zA-Z0-9'.$allowed_chars.']/', $string) == 1) 
    return 1;
  else
    return 0;
}

?>

So funtioniert das auch. Sobald ich aber den Wert der Konstante verändere, also z.B.:
define('ALLOWED_CHARS', '._-*') um noch weitere Zeichen zu erlauben, funktioniert es nicht mehr. Was ist falsch?
 
Das Bindestrichzeichen wird in einer Zeichenklasse als „bis“-Zeichen interpretiert, wenn es nicht das letzt Zeichen ist. a-z bedeutet also alle ASCII-Zeichen von x61 (a) bis x7A (z). In deinem Fall bedeutet das Bindestrich alls ASCII-Zeichen von x5F (_) bis x2A (*). Da aber x2A kleiner als x5F ist, gibt es einen Fehler.
 
Sonst könntest du auch die hexadezimalen Darstellungen (\x2A\x2D\x2E\x5F) verwenden oder aber das Bindestrichzeichen durch Maskierung die spezielle Funktion entziehen (._\-*).
 
Zurück