Laravel simplifies URL validation with the introduction of the Str::isUrl method, offering developers a straightforward approach to verify URL validity with optional protocol restrictions for enhanced security and flexibility.
The isUrl method provides basic URL validation with the ability to specify acceptable protocols:
use Illuminate\Support\Str; // Basic URL validation$isUrl = Str::isUrl('http://example.com'); // true$isUrl = Str::isUrl('laravel'); // false // With protocol restrictions$isUrl = Str::isUrl('http://example.com', ['http', 'https']);
This method proves particularly valuable in content management systems requiring URL validation:
class ResourceValidator{ public function validateExternalLinks(array $links) { return collect($links)->filter(function ($url, $type) { return match ($type) { 'documentation' => Str::isUrl($url, ['https']), 'repository' => Str::isUrl($url, ['https']), 'demo' => Str::isUrl($url, ['http', 'https']), default => Str::isUrl($url) }; }); } public function validateSecureResources(array $urls) { return collect($urls) ->filter(fn($url) => Str::isUrl($url, ['https'])) ->values(); } public function sanitizeBookmarks(array $bookmarks) { return array_filter($bookmarks, function ($bookmark) { // Only allow http/https URLs if (!Str::isUrl($bookmark, ['http', 'https'])) { return false; } // Additional validation logic here return true; }); }} // Usage$validator = new ResourceValidator();$externalLinks = [ 'documentation' => 'https://docs.example.com', 'demo' => 'http://demo.example.com', 'invalid' => 'not-a-url'];$validLinks = $validator->validateExternalLinks($externalLinks);
The method excels in form validation scenarios where users submit various types of URLs:
class ProfileController extends Controller{ public function validateSocialMedia(Request $request) { $socialUrls = $request->input('social_urls', []); $validatedUrls = []; foreach ($socialUrls as $platform => $url) { if (empty($url)) continue; $isValid = match ($platform) { 'linkedin' => Str::isUrl($url, ['https']) && str_contains($url, 'linkedin.com'), 'twitter' => Str::isUrl($url, ['https']) && str_contains($url, 'twitter.com'), 'github' => Str::isUrl($url, ['https']) && str_contains($url, 'github.com'), 'portfolio' => Str::isUrl($url, ['http', 'https']), default => false }; if ($isValid) { $validatedUrls[$platform] = $url; } } return $validatedUrls; } public function validateCompanyWebsites(array $websites) { return array_filter($websites, function ($website) { return Str::isUrl($website, ['https']) && !str_contains($website, 'localhost') && !str_contains($website, '127.0.0.1'); }); }}
For API integrations requiring endpoint validation:
class WebhookService{ public function registerWebhook(string $url, array $events) { // Validate webhook URL is secure if (!Str::isUrl($url, ['https'])) { throw new InvalidWebhookException('Webhook URLs must use HTTPS protocol'); } // Additional validation for webhook endpoints if (!$this->isReachableEndpoint($url)) { throw new InvalidWebhookException('Webhook endpoint is not reachable'); } return $this->createWebhookSubscription($url, $events); } public function validateIntegrationUrls(array $integrations) { $validated = []; foreach ($integrations as $service => $config) { if (isset($config['callback_url']) && Str::isUrl($config['callback_url'], ['https'])) { $validated[$service] = $config; } } return $validated; }}
The isUrl method streamlines URL validation by providing a consistent, reliable approach to verify URL format while offering flexibility through protocol restrictions for enhanced security requirements.