解析错误:语法错误,意外',',期待'}'在第3行

时间:2010-07-28 19:02:24

标签: php regex

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;
    }
}

问题是什么? 对不起新手问题

6 个答案:

答案 0 :(得分:2)

问题在于:

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

问题是{$var}是PHP中的一种特殊语法。因此{$var,$var}无效,因为$var,$var不是有效的变量名称...

试试这个:

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

答案 1 :(得分: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;
    }
}

答案 2 :(得分:1)

问题出在这一行

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

在用双引号("these")括起来的字符串中,您可以包含"this = $value"之类的变量。

执行此操作的简洁方法,尤其是在包含数组元素时,使用{}将其封闭,如"This is an array element: {$array['element']}"

由于您有一个包含"{$something的字符串,因此php希望这是一个变量并查找},但会看到,。因此错误。

这将解决问题:

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

因为第一个{不会被解释为启动要包含的变量。

(是的,\$也很特殊,需要转发)

答案 3 :(得分:0)

我认为php正在尝试评估你的字符串,因为你使用了双引号。请尝试使用单引号,并根据需要连接变量:

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

请参阅:http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double

答案 4 :(得分:0)

PHP解释双引号字符串中的变量。请参阅PHP文档中的String Parsing{$min,$max}被解释为变量的开头。并且在PHP中,变量名无效,它是unexpected

解决问题的方法更改此行:

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

对此:

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

答案 5 :(得分:-1)

在PHP双引号字符串处理转义序列,所以它可能会在那里的\s上绊倒。将其更改为\\s(以逃避反斜杠并使其成为字面反斜杠)。