Laravel字符串验证器实际测试的是什么?

时间:2018-01-23 01:42:45

标签: laravel validation

我认为Laravel字符串验证器的工作方式类似于PHP的字符串清理过滤器http://php.net/manual/en/filter.filters.sanitize.php。特别是,我认为它会删除标签,但经过测试,我发现情况并非如此。这提出了一些有趣的观点:

  • 字符串规则测试的是什么? (或许这个值不是一个数组,也许?)
  • 为什么不过滤标签?也许是因为(默认情况下)标签是由刀片转义的?
  • 如果我想剥离标签,我会使用什么过滤器?我自己还是正则表达式?

一般来说,了解更多关于每个Laravel规则如何运作的细节会更好。从代码中解决问题很困难。任何额外的资源将不胜感激。

1 个答案:

答案 0 :(得分:1)

字符串规则测试的是什么? (或许这个值不是一个数组,也许?)

它正在检查本地PHP的is_string值。

为什么不过滤代码?也许是因为(默认情况下)标签是由刀片转义的?

不,它只是验证一个值,而不是过滤一个值。

如果我想删除标签,我会使用哪种过滤器?我自己还是正则表达式?

你可以使用内置的 e 函数来转义字符串,但是你通常不需要它,因为如果你使用双花括号{{$value}},刀片已经为你做了

如果您想了解该功能的用途,可以查看文件vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php。它包含那里的所有验证规则,您可以检查验证规则正在做什么。

对于string规则,它正在调用this code block

/**
 * Validate that an attribute is a string.
 *
 * @param  string  $attribute
 * @param  mixed   $value
 * @return bool
 */
public function validateString($attribute, $value)
{
    return is_string($value);
}

其中,它只是本地is_string,而且来自PHP文档:

is_string(false) = bool(false)
is_string(true) = bool(false)
is_string(NULL) = bool(false)
is_string('abc') = bool(true)
is_string('23') = bool(true)
is_string(23) = bool(false)
is_string('23.5') = bool(true)
is_string(23.5) = bool(false)
is_string('') = bool(true)
is_string(' ') = bool(true)
is_string('0') = bool(true)
is_string(0) = bool(false)