regex - 使用正则表达式验证 Laravel 字段
问题描述
我正在制作一个 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
. - 后跟一个字符
,
(仅当它后面有一个字符时) - 而这一切都可以重复一次或多次。
请您帮我找出适当的验证规则应该是什么,或者至少给我一些指导。
非常感谢您提前。
解决方案
您可以使用
$validation = Validator::make($request->all(),[
'sort' => [
'sometimes',
'regex:/^(-?(?:name|postalcode|age))(?:,(?1))*$/'
],
]);
请参阅正则表达式演示。
详情:
^
- 字符串的开始(-?(?:name|postalcode|age))
- 第 1 组:-?
- 一个可选的-
(?:name|postalcode|age)
- 列出的单词之一
(?:,(?1))*
- 逗号和第 1 组模式的零次或多次重复$
- 字符串结束。
推荐阅读
- javascript - 向对消息 discrod js 做出反应的用户发送消息
- javascript - 如何将此 reactjs 表单中的数据发送到数据库?
- php - TinyMCE(Laravel)中的HTML显示错误
- javascript - Django-Javascript - 在将新元素添加到 html 模板正文时,materialcss 会破坏 javascript 代码
- c# - Blazor Inputselect onchange 事件不起作用
- python - Python 在两个函数之间传递变量
- flutter - GitLab Flutter CI 因“tojunit:找不到命令”而失败
- javascript - 在接收数据之前显示图表 - ChartJs - 每秒刷新一次
- reactjs - 反应:无法在表单中设置值
- postgresql - 如何修复“需要冻结 xid 截止之前未提交的 xmin,表“db.pg_catalog.pg_largeobject”的自动真空