Я делаю проверку с помощью регулярного выражения из запроса, эта проверка должна проверить, что отправляемый параметр является 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() !== '';
}
В Laravel у вас есть IP Правило проверки, так что вы можете использовать:
return [
'segmentwan' => 'ip',
'segmentlan' => 'ip',
];
Также, если честно, когда я смотрю на ваш код, я не вижу ошибки. Вы уверены, что ошибка с этими двумя регулярными выражениями?
Измените свои правила проверки. Когда вы используете регулярное выражение, вам нужно использовать массив вместо разделителя труб.
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.
Вы не должны использовать регулярные выражения для проверки IP-адресов; ты можешь использовать filter_var()
вместо этого встроенная функция
У него много флагов, включая FILTER_FLAG_IPV4
для ipv4 & FILTER_FLAG_IPV6
для ipv6 … Конечно, вы можете смешивать флаги, чтобы вы могли проверить оба