我认为Laravel字符串验证器的工作方式类似于PHP的字符串清理过滤器http://php.net/manual/en/filter.filters.sanitize.php。特别是,我认为它会删除标签,但经过测试,我发现情况并非如此。这提出了一些有趣的观点:
一般来说,了解更多关于每个Laravel规则如何运作的细节会更好。从代码中解决问题很困难。任何额外的资源将不胜感激。
答案 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)