preg_match (): не найдено конечного разделителя ‘/’ Laravel

Я делаю проверку с помощью регулярного выражения из запроса, эта проверка должна проверить, что отправляемый параметр является IP.

Мои правила следующие:

  <?php

namespace App\Http\Requests\usuarios;

use Illuminate\Foundation\Http\FormRequest;

class storeVPN extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'segmentwan' => 'regex:/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/',
'segmentlan' => 'regex:/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/',

];
}

отладчик показывает мне, что ошибка в этой строке

отладчик показывает мне, что ошибка в этой строке

return preg_match($parameters[0], $value) > 0;

Ваша ошибка завершена.

 * @return bool
*/
public function validateRegex($attribute, $value, $parameters)
{
if (! is_string($value) && ! is_numeric($value)) {
return false;
}

$this->requireParameterCount(1, $parameters, 'regex');

return preg_match($parameters[0], $value) > 0;
}

/**
* Validate that a required attribute exists.
*
* @param  string  $attribute
* @param  mixed   $value
* @return bool
*/
public function validateRequired($attribute, $value)
{
if (is_null($value)) {
return false;
} elseif (is_string($value) && trim($value) === '') {
return false;
} elseif ((is_array($value) || $value instanceof Countable) && count($value) < 1) {
return false;
} elseif ($value instanceof File) {
return (string) $value->getPath() !== '';
}

1

Решение

В Laravel у вас есть IP Правило проверки, так что вы можете использовать:

    return [
'segmentwan' => 'ip',
'segmentlan' => 'ip',
];

Также, если честно, когда я смотрю на ваш код, я не вижу ошибки. Вы уверены, что ошибка с этими двумя регулярными выражениями?

0

Другие решения

Измените свои правила проверки. Когда вы используете регулярное выражение, вам нужно использовать массив вместо разделителя труб.

return [
'segmentwan' => [ 'regex:/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/'],
'segmentlan' => [ 'regex:/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/'],
];

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

ОБНОВИТЬ

Если вы проверяете IP-адрес, то laravel предоставляет три варианта проверки.

IP:
Проверяемое поле должно быть IP-адресом.

ipv4:
Проверяемое поле должно быть адресом IPv4.

ipv6:
Проверяемое поле должно быть адресом IPv6.

0

Вы не должны использовать регулярные выражения для проверки IP-адресов; ты можешь использовать filter_var() вместо этого встроенная функция

У него много флагов, включая FILTER_FLAG_IPV4 для ipv4 & FILTER_FLAG_IPV6 для ipv6 … Конечно, вы можете смешивать флаги, чтобы вы могли проверить оба

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector