Проверка регулярного выражения Laravel на цену ИЛИ пустую - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь сделать регулярное выражение для цены ИЛИ пустым. У меня есть часть цены (голландский использует запятую вместо точки), которая на самом деле работает

/^\d+(,\d{1,2})?$/

Приведенное выше регулярное выражение подтверждает значение 21,99

.

Теперь я пытаюсь добавить пустую часть, чтобы поле могло быть ... просто пустым ^ $

/(^$|^\d+(,\d{1,2})?$)/

Но Ларавел начинает жаловаться, как только я меняю регулярное выражение: «Метод [validate ^ \ d + (, \ d {1,2})? $) /] Не существует.»

Работает нормально:

$rules = [
    'price' => 'regex:/^\d+(,\d{1,2})?$/'
];

Ларавел говорит нет ...:

$rules = [
    'price' => 'regex:/(^$|^\d+(,\d{1,2})?$)/'
];

Kenken9990 ответ - Laravel больше не ломается, но пустое значение по-прежнему неверно:

$rules = [
    'price' => 'regex:/^(\d+(,\d{1,2})?)?$/'
];

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

| также является разделителем для нескольких правил проверки.

Например, допустимо следующее:

 $rules = [ "price" => "nullable|numeric|between:0,99" ];

Чтобы использовать это регулярное выражение, вам нужно переключиться на использование массива:

$rules = [
    'price' => [ 'regex:/(^$|^\d+(,\d{1,2})?$)/' ]
];

Это также указано в документации :

Примечание. При использовании шаблонов regex / not_regex может потребоваться указать правила в массиве, а не разделители каналов, особенно если регулярное выражение содержит символ канала.

Кстати, оригинальное правило может также делать то, что вы хотите, и также может быть записано как:

$rules [
     'price' => [ 'nullable', 'numeric', 'between:0,99' ]
]
0 голосов
/ 02 июля 2018

это работа?

$rules = [
    'price' => 'nullable|regex:/^(\d+(,\d{1,2})?)?$/'
];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...