我有这个正则表达式,我想用他们想要使用的权重传递的参数替换"lb"部分,所以我有这个
protected function validateCheckWeight($attribute, $value, $parameters)
{
// this always outputs correctly either true or false
return preg_match('/^(?!0'd|0lb$)'d+(?:'.'d+)?lb$/', $value);
}
我想要的是这个,但在进行验证时不起作用
protected function validateCheckWeight($attribute, $value, $parameters)
{
return return preg_match('@/^(?!0'd|0' . $parameters[0] .'$)'d+(?:'.'d+)?' . $parameters[0] . '$/@', $value);
}
protected function validateCheckWeight($attribute, $value, $parameters)
{
dd('@/^(?!0'd|0' . $parameters[0] .'$)'d+(?:'.'d+)?' . $parameters[0] . '$/@');
// output "@/^(?!0'd|0kg$)'d+(?:'.'d+)?kg$/@"
return preg_match('@/^(?!0'd|0' . $parameters[0] .'$)'d+(?:'.'d+)?' . $parameters[0] . '$/@', $value);
// this always outputs false
}
您的正则表达式中有 2 个不同的分隔符,@
和 /
。我刚刚确认,如果您从正则表达式的开头和结尾删除@
,您的函数将为您的注释中提到的输入返回 true($value
= "kg"
, $parameters
= array('kg')
)。
如果我正确理解这个问题,你可以
return strlen(parameters[0]) == strlen(rtrim(parameters[0],'lb'));
但我认为再次不正确理解这一点。