Правило Laravel, которое должно пройти, если значением является имя хоста или IP
Anton
18.04.2024 16:59
122
Итак, я создал класс правил Laravel:
class ValidHost implements Rule { /** * Create a new rule instance. * * @return void */ public function __construct() { // }
/** * Determine if the validation rule passes. * * @param string $attribute * @param mixed $value * @return bool */ public function passes($attribute, $value) { return $this->isValidFDQN($value) || $this->isValidIP($value); }
private function isValidFDQN($value) { return preg_match('/^(?!:\/\/)(?=.{1,255}$)((.{1,63}\.){1,127}(?![0-9]*$)[a-z0-9-]+\.?)$/i', $value); }
private function isValidIP($value) { // check for valid ip4 or ip6 }
/** * Get the validation error message. * * @return string */ public function message() { return 'Invalid hostname or IP address'; } }
Есть ли способ использовать встроенную проверку IP-адреса Laravel здесь (в файле isValidIP()) вместо написания для этого регулярного выражения. (Я отстой в регулярном выражении).
Если это работает, я могу проверить в своем контроллере следующее:
$request->validate([ 'host'=>['required', 'unique', new ValidHost] ]);
Вам не нужно писать регулярное выражение, в PHP для этого уже есть функция (filter_var).
private function isValidIP($value) return filter_var($value, FILTER_VALIDATE_IP) !== false; }
Laravel делает то же самое при проверке
public function validateIp($attribute, $value) { return filter_var($value, FILTER_VALIDATE_IP) !== false; }