使用regexp进行Laravel字段验证

使用regexp进行Laravel字段验证,regex,laravel,validation,Regex,Laravel,Validation,我正在制作一个API,但在使用指示顺序的参数发出请求时,我很难找到正确的验证规则 他们要求结果的顺序可以是给定数量的值。例如,假设可能的值为:name、postalcode和age 这种顺序可以是升序,也可以是降序,可能会产生如下请求: https://www.example.com/api/v1/users?sort=name,-postalcode,-age 我试图找到正确的验证规则,但到目前为止,我还没有成功 我所面临的问题是-字符和,可能串联在一起,同时字段必须在一些可能的值中有一个合

我正在制作一个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()[
“排序”=>[
“有时”,
'正则表达式:/^((?:名称| postalcode |年龄))(?:,(?1))*$/'
],
]);

详情:

  • ^
    -字符串的开头
  • ((?:姓名|邮编|年龄))
    -第1组:
    • -?
      -可选的
      -
    • (?:name | postalcode | age)
      -列出的单词之一
  • (?:,(?1))*
    -逗号和第1组模式的零次或多次重复
  • $
    -字符串结束
您可以使用

$validation=Validator::make($request->all()[
“排序”=>[
“有时”,
'正则表达式:/^((?:名称| postalcode |年龄))(?:,(?1))*$/'
],
]);

详情:

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

改用数组怎么样:
https://www.example.com/api/v1/users?sort[]=name&sort[]=-postalcot[]=-age
这将简化验证过程,我不想麻烦验证您当前的方式。我会有一个可接受的字段列表,只需忽略列表中未包含的任何发送选项。@shaedrich感谢您的注释,但我想这样做,以便用户可以尽可能方便地输入这些参数。@Peppermintology感谢您的提示,但我认为这不是一个好主意。认为查询可以以不同的写入顺序和可能的减号连接多个值。总的来说,组合的数量会非常多,这是你误解的。我不是建议您创建一个包含所有可能组合的列表,而是一个包含
已接受的
字段名的列表,您可以使用这些字段名来比较传入的数据。如果它不在列表中,请忽略它,而不是抛出验证错误。改用数组怎么样:
https://www.example.com/api/v1/users?sort[]=name&sort[]=-postalcot[]=-age
这将简化验证过程,我不想麻烦验证您当前的方式。我会有一个可接受的字段列表,只需忽略列表中未包含的任何发送选项。@shaedrich感谢您的注释,但我想这样做,以便用户可以尽可能方便地输入这些参数。@Peppermintology感谢您的提示,但我认为这不是一个好主意。认为查询可以以不同的写入顺序和可能的减号连接多个值。总的来说,组合的数量会非常多,这是你误解的。我不是建议您创建一个包含所有可能组合的列表,而是一个包含
已接受的
字段名的列表,您可以使用这些字段名来比较传入的数据。如果它不在列表中,请忽略它,而不是抛出验证错误。