【问题标题】:laravel5.1 validate numberlaravel5.1 验证号码
【发布时间】:2016-04-05 17:12:39
【问题描述】:

如何使用 laravel 验证器验证数字。就我而言,我需要验证一个数字是否在“1.00”和“50.00”之间。

作为数字对之间的分隔符“。”并且应该允许使用“,”。该数字应该只有两位小数。有没有办法结合使用标准的 laravel 验证器来完成这项工作?

使用正则表达式,正则表达式应符合以下要求:

从 0-9 开始(可以有 2 个数字)

接着是一个。或者一个,

后跟 0-9(可能有 2 个数字)

或者简单的数字,比如 1-9,没有点和逗号

总共应允许 1 到 50 之间的数字。 此正则表达式应用于用户应该能够充值的预付费系统 他们的帐户从 1 到 50。因此,像 1.00 和 1,00 这样的条目应该像 1 或 2 一样有效。 50.00 是金额的最大值。最低 1.00。

【问题讨论】:

  • 嗯,我的正则表达式不太好,你能给我看一个正则表达式吗,这样我可以从中学到一些东西吗?我认为使用正则表达式的记录很好。
  • 事后看来(在对 RegEx 进行了一些研究之后),我可能不得不撤回我的评论。对相同长度的十进制值(例如10.00 to 50.00)进行正则表达式很简单,但是当涉及到可变长度(1.00 to 50.00)时,RegEx 似乎无法处理它。另外,我认为您不需要测试,,因为您的范围不允许分隔符,除非您打算使用, 作为小数位标记。我会看看我是否能想到其他解决方案。
  • 谢谢,我已经编辑了第一篇文章,所以你可以更好地指出我认为的要求。

标签: regex laravel laravel-5 laravel-5.1 laravel-validation


【解决方案1】:

你可以像这样使用正则表达式:

   $rules = [
       'field' => 'regex:/^\d*(\.\d{2})?$/'
   ];

PS:这个工具可能很有用https://regex101.com/

【讨论】:

  • 您错过了问题的关键点:[...] 在“1.00”和“50.00”之间。这不适用于这种情况。 0.99 和 50.01 都通过了...
  • 有没有办法为此使用正则表达式或不可能?
  • 使用正则表达式总有办法。
【解决方案2】:

我将创建以下请求类:

<?php

namespace App\Http\Requests;

class TestRequest extends Request
{
    public function rules()
    {
        return [
            'number' => [
                'required',
                'regex:/^\d{1,2}(\.\d{1,2})?$/',
                'numeric',
                'min:1',
                'max:50'
            ],
        ];
    }

    public function authorize() {
        return true;
    }

    public function all() {
        $data = parent::all();
        if (isset($data['number'])) {
            $data['number'] = str_replace(',','.', $data['number']);
        }

        return $data;
    }
}

并在 Controller 中注入这个 Request 类:

public function test(TestRequest $request)
{
      dd($request->all());    
}

【讨论】:

  • 任何方式来重定向用户并显示错误消息,就像我过去对验证器所做的那样?
【解决方案3】:

这是您要查找的正则表达式:

/^((([1-4][0-9]|[1-9])([,.]\d{1,2})?)|(?:50([,.]0{1,2})?))$/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-20
    • 2015-12-05
    • 2011-12-30
    • 2015-04-23
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    相关资源
    最近更新 更多