首页 > 解决方案 > 使用正则表达式验证 Laravel 字段

问题描述

我正在制作一个 API,但在使用指示订单的参数发出请求时找不到正确的验证规则。

他们可以要求结果的顺序可以是给定数量的值。举个例子,可能的值是:namepostalcodeage

该顺序可能是升序或降序,并可能导致如下请求:

https://www.example.com/api/v1/users?sort=name,-postalcode,-age

我正在尝试找到正确的验证规则,但到目前为止我还没有成功。

我面临的问题是-字符的可能串联以及,字段必须在某些可能值中具有合适值的事实。也就是说,我不知道如何将规则放在一起:

$validation = Validator::make($request->all(),[
    'sort' => 'sometimes|regex:/(^-?+(name|postalcode|age)+(,)?+(-)?){1,}/',
]);

我猜规则是这样的:

请您帮我找出适当的验证规则应该是什么,或者至少给我一些指导。

非常感谢您提前。

标签: regexlaravelvalidation

解决方案


您可以使用

$validation = Validator::make($request->all(),[
    'sort' => [
        'sometimes',
        'regex:/^(-?(?:name|postalcode|age))(?:,(?1))*$/'
     ],
]);

请参阅正则表达式演示

详情

  • ^- 字符串的开始
  • (-?(?:name|postalcode|age))- 第 1 组:
    • -?- 一个可选的-
    • (?:name|postalcode|age)- 列出的单词之一
  • (?:,(?1))*- 逗号和第 1 组模式的零次或多次重复
  • $- 字符串结束。

推荐阅读