Funktion safe_string

P

P_F

Hey,

diese Funktion soll eigentlich einen String validieren:

PHP:
/*
 * Erlaubt folgende Zeichen nicht:
 * < > " ' % ; ( ) & + - / \
 */
function safe_string($str, $minLengh=3, $maxLengh=15) {
    
    $str = trim($str); /** Leerzeichen entfernen **/
    
    if ($minLengh < 1)
        $minLengh = 1;
    if ($maxLengh <= $minLengh)
        $maxLengh = $minLengh+1;
        
    if (preg_match('[\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\\|\/|\-]',$str) || strlen($str) < $minLengh || strlen($str) > $maxLengh) {
        return false;
    } else {
        return true;
    }
}

bei safe_string('test'); gibt sie true zurück, gut.
bei safe_string('te<st'); gibt sie false zurück, gut.

bei safe_string('te/st'); gibt sie aber auch true zurück, das ist schlecht, woran liegts?
 
Also ich verstehe deine Antwort nicht so ganz. Ich habe so ein Tool, den RegexCoach. Dort funktioniert der Ausdruck und findet auch / und \ in einem String.
 
Probiere es mal mit folgender Zeichenklasse:
Code:
[\x22\x25\x26\x27\x28\x29\x2B\x2D\x2F\x3B\x3C\x3E\x5C]
 
Das funktioniert garnicht, die Funktion gibt nun selbst bei safe_string('test<') true zurück ...:-(
 
Zuletzt bearbeitet von einem Moderator:
Probier mal folgende Funktion:
PHP:
<?php

	function safe_string($str, $minLengh=3, $maxLengh=15)
	{
		$str = trim($str);
		if( $minLengh < 1 ) {
			$minLengh = 1;
		}
		if( $maxLengh <= $minLengh ) {
			$maxLengh = $minLengh + 1;
		}
		return !( preg_match('/[\x22\x25\x26\x27\x28\x29\x2B\x2D\x2F\x3B\x3C\x3E\x5C]/s', $str) || strlen($str) < $minLengh || strlen($str) > $maxLengh );
	}

?>
 
Zurück