php构建或替换正则表达式的一部分

时间:2016-03-12 22:45:38

标签: php laravel

我有这个正则表达式,我想替换" 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 个答案:

答案 0 :(得分:1)

您的正则表达式@/中有2个不同的分隔符。我刚刚确认,如果从正则表达式的开头和结尾删除@,则对于评论中提到的输入,您的函数将返回true($value = "kg"$parameters = array('kg'))。

答案 1 :(得分:0)

如果我正确理解了这个问题,你可以

return strlen(parameters[0]) == strlen(rtrim(parameters[0],'lb'));

但我想再也不能理解这一点。