opnform/app/Rules/ValidPhoneInputRule.php

43 lines
1.6 KiB
PHP
Raw Permalink Normal View History

<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class ValidPhoneInputRule implements Rule
{
2023-10-01 07:43:14 +00:00
public ?int $reason = 0;
2023-09-23 09:42:22 +00:00
public function passes($attribute, $value)
{
2024-02-23 10:54:12 +00:00
if (! is_string($value) || ! $value) {
return false;
}
try {
2024-02-23 10:54:12 +00:00
if (ctype_alpha(substr($value, 0, 2))) { // First 2 will be country code
$value = substr($value, 2);
}
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
2023-09-23 09:42:22 +00:00
$phone = $phoneUtil->parse($value);
$this->reason = $phoneUtil->isPossibleNumberWithReason($phone);
2024-02-23 10:54:12 +00:00
2023-09-23 09:42:22 +00:00
return $this->reason === \libphonenumber\ValidationResult::IS_POSSIBLE;
} catch (\Exception $e) {
return false;
}
}
public function message()
{
2023-09-23 09:42:22 +00:00
return match ($this->reason) {
\libphonenumber\ValidationResult::IS_POSSIBLE => 'The :attribute is not valid for an unknown reason.',
\libphonenumber\ValidationResult::INVALID_COUNTRY_CODE => 'The :attribute does not have a valid country code.',
\libphonenumber\ValidationResult::TOO_SHORT => 'The :attribute is too short.',
\libphonenumber\ValidationResult::TOO_LONG => 'The :attribute is too long.',
\libphonenumber\ValidationResult::IS_POSSIBLE_LOCAL_ONLY => 'The :attribute is not a valid phone number (local number).',
\libphonenumber\ValidationResult::INVALID_LENGTH => 'The :attribute does not have a valid length.',
default => 'The :attribute is not a valid phone number.',
};
}
2023-09-23 09:42:22 +00:00
}