在Laravel 5中验证阿拉伯数字

时间:2017-04-29 01:02:15

标签: php validation laravel-5

我有一个表单,其中包含一个字段供用户输入特定付款的金额值。此字段是类型编号的输入。

Laravel中此输入的验证规则是:

'amount' => 'required|numeric'

当我输入英文金额时:1500 =>验证通过,一切正常。

但是当我输入阿拉伯语中的金额时:١٥٠٠ =>验证失败,并显示以下错误消息:

  

" validation.numeric"

我应该手动验证此字段还是有其他解决此问题的方法?

error screenshot

1 个答案:

答案 0 :(得分:1)

也许您可以创建自己的验证类型。

您可以在app/Providers/AppServiceProvider.php中的引导方法中添加类似这样的内容。

Validator::extend('arabic_numbers', function ($attributes, $value, $parameters, $validation) {
  $arabic_numbers = [
    '٥',
    '١',
    // add more
  ];

  $input = $value;
  if (!$input) {
    return false;
  }
  $chars = preg_split('//u', $input, -1, PREG_SPLIT_NO_EMPTY);
  foreach ($chars as $char) {
    if (!in_array($char, $arabic_numbers)) {
      return false;
    }
  }

  return true;
});

您可以添加到现有规则,例如required|arabic_numbers

或者使用这样的东西:

$input = '١';
$validator = Validator::make([
    'user_input' => $input,
], [
    'user_input' => 'required|arabic_numbers'
];

if ($validator->fails()) {
    //
}

您还可以在许多其他方式中使用,例如在自定义请求中使用:

public function rules()
{
    return [
        'something' => 'required|arabic_numbers',
    ];
}

希望这有帮助。