【发布时间】:2021-08-15 15:37:55
【问题描述】:
我正在制作 API,但在使用指示订单的参数发出请求时找不到正确的验证规则。
他们可以要求结果的顺序可以是给定数量的值。例如,可能的值是:name、postalcode 和 age
并且该顺序可能是升序或降序,并可能导致如下请求:
https://www.example.com/api/v1/users?sort=name,-postalcode,-age
我正在尝试找到正确的验证规则,但到目前为止我还没有成功。
我面临的问题是- 字符和, 的可能串联以及字段必须在一些可能值中具有合适值的事实。也就是说,我不知道如何将规则放在一起:
$validation = Validator::make($request->all(),[
'sort' => 'sometimes|regex:/(^-?+(name|postalcode|age)+(,)?+(-)?){1,}/',
]);
我猜规则是这样的:
- 可以有一个可选的
-字符 - 后跟以下值之一:
name、postalcode或age。 - 后跟一个字符
,(仅当它后面有一个字符时) - 所有这些都可以重复一次或多次。
请你帮我找出合适的验证规则应该是什么,或者至少给我一些指导。
非常感谢您。
【问题讨论】:
-
用数组代替怎么样:
https://www.example.com/api/v1/users?sort[]=name&sort[]=-postalcodesort[]=-age这样可以大大简化验证 -
就我个人而言,我不会费心去验证你现在的样子。我会有一个可接受的字段列表,并且忽略发送的任何不在列表中的选项。
-
@shaedrich 感谢您的说明,但我想让用户尽可能方便地输入这些参数。
-
@Peppermintology 感谢您的提示,但我认为这不是一个好主意。认为查询可以连接多个值,以不同的书写顺序和可能的减号。总的来说,组合的数量会非常多。
-
@cooper 你误会了。我并不是建议您创建一个所有可能组合的列表,只是一个
accepted字段名称列表,您可以使用它来比较传入的值。如果它不在列表中,请忽略它而不是抛出验证错误。
标签: regex laravel validation