@QueryParam要求正则表达式没有按预期工作

时间:2016-09-13 13:53:24

标签: php symfony fosrestbundle queryparam

我有一个简单的API端点设置如下:

/**
 *
 * @QueryParam(name="originLat", requirements="\d+", strict=true, nullable=false)
 * @QueryParam(name="originLng", strict=true, nullable=false)
 * @QueryParam(name="departureTime", requirements="/\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d/", strict=true, nullable=false)
 *
 * @param ParamFetcher $paramFetcher
 */
public function getWalkingJourney(ParamFetcher $paramFetcher)
{
    $dTime = $paramFetcher->get('departureTime');
    $oLat = $paramFetcher->get('originLat');
    $oLng = $paramFetcher->get('originLng'),
}

如果我传递一个简单的数字,则originLat的[QueryParam] [1]可以正常工作,但更复杂的departureTime正则表达式总是失败并显示以下消息:

Parameter "departureTime" of value "2016-09-13 14:47:36" violated a constraint "Parameter 'departureTime' value, does not match requirements '/\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d/'"

这似乎是反直觉的,因为这是正确的正则表达式。

我在这里做错了吗?

2 个答案:

答案 0 :(得分:0)

您在requirements中添加了PCRE delimiters,这可能会搞乱您的正则表达式。

尝试* @QueryParam(name="departureTime", requirements="\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d", strict=true, nullable=false)

答案 1 :(得分:0)

这里的问题是空间问题。注释不能很好地处理空格,所​​以当正则表达式中的空格被替换为\ s时,一切正常。

不起作用

 * @QueryParam(name="departureTime", requirements="\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d", strict=true, nullable=false)     *

<强>作品

 * @QueryParam(name="departureTime", requirements="\d{4}-[01]\d-[0-3]\d\s[0-2]\d:[0-5]\d:[0-5]\d", strict=true, nullable=false)     *