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;
}
}
问题是什么? 对不起新手问题
答案 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
(以逃避反斜杠并使其成为字面反斜杠)。