2010-07-28 8 views
1
function validText ($input, $min = null, $max = null) 
{ 
    if (!empty($min) && !empty($max)) { 
     $text = "^[a-zA-Z\s0-9]{$min,$max}+$"; 
    } else { 
     $text = "/^[a-zA-Z\s0-9]+$/"; 
    } 

    if (preg_match($text, $input)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

quel est le problème? désolé débutant problèmeErreur d'analyse: erreur de syntaxe, inattendue ',', attendez '}' ici sur la ligne 3

+0

hollsk je pense que ce ne est pas un problème regex, mais je ne sais pas, en tout cas merci pour retag :) –

Répondre

2

Le problème est dans la ligne:

$text = "^[a-zA-Z\s0-9]{$min,$max}+$"; 

Le problème est que {$var} est une syntaxe spéciale en PHP. Donc {$var,$var} est invalide depuis $var,$var est pas un nom de variable valide ...

Essayez ceci:

$text = "^[a-zA-Z\s0-9]{{$min},{$max}}+$"; 
-1

dans les chaînes de guillemets doubles PHP traiter les séquences d'échappement, donc il est probablement trébucher sur le \s là-bas. changez-le en \\s (pour échapper à la barre oblique inverse et en faire un antislash littéral).

0

PHP interprète des variables dans des chaînes entre guillemets. Voir String Parsing dans la documentation PHP. {$min,$max} est interprété comme le début d'une variable. Et comme dans PHP , dans variablenames ne sont pas valides, il est unexpected.

Pour résoudre votre problème Modifiez cette ligne:

$text = "^[a-zA-Z\s0-9]{$min,$max}+$"; 

à ceci:

$text = "^[a-zA-Z\s0-9]{" . $min . "," . $max ."}+$"; 
1

en quelque sorte i figure it out :) merci.

function validText ($input,$min = null ,$max = null) 
{ 
    if(!empty($min) && !empty($max)) { 
     $text = '^[a-zA-Z\s0-9]{'.$min.','.$max.'}+$'; 
    } else { 
     $text = "/^[a-zA-Z\s0-9]+$/"; 
    } 

    if (preg_match($text, $input)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 
1

Le problème est dans cette ligne

"^[a-zA-Z\s0-9]{$min,$max}+$" 

Dans les chaînes entre guillemets doubles ("these"), vous pouvez inclure des variables telles que "this = $value".

La manière propre à ce faire, notamment en incluant les éléments du tableau, est les Enfermer en utilisant {}, comme "This is an array element: {$array['element']}"

Puisque vous avez une chaîne contenant "{$something, php attend que ce soit une variable et recherche }, mais voit le ,. D'où l'erreur.

Cela permettra de résoudre le problème:

"^[a-zA-Z\\s0-9]{{$min},{$max}}+\$" 

depuis le premier { ne sera pas interprété comme une variable à partir d'inclure.

(oui, le \ et $ sont spéciaux aussi bien et ont besoin d'être échappé)

Questions connexes