How to validate domain name in PHP?

In PHP, you can validate domain names using regular expressions with the preg_match() function. A valid domain name must follow specific rules: contain only alphanumeric characters and hyphens, have proper length limits, and follow DNS naming conventions.

Example

Here's a function to validate domain names ?

<?php
function is_valid_domain_name($domain_name) {
    return (preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name) //valid characters check
        && preg_match("/^.{1,253}$/", $domain_name) //overall length check
        && preg_match("/^[^.]{1,63}(\.[^.]{1,63})*$/", $domain_name)); //length of every label
}

// Test with valid domain names
$domain1 = 'tutorialspoint.com';
$domain2 = 'sub.example.org';
$domain3 = 'test-site.net';

echo "Domain: $domain1 - " . (is_valid_domain_name($domain1) ? "Valid" : "Invalid") . "<br>";
echo "Domain: $domain2 - " . (is_valid_domain_name($domain2) ? "Valid" : "Invalid") . "<br>";
echo "Domain: $domain3 - " . (is_valid_domain_name($domain3) ? "Valid" : "Invalid") . "<br>";

// Test with invalid domain names
$invalid1 = 'https://tutorialspoint.com'; // Contains protocol
$invalid2 = '-invalid.com'; // Starts with hyphen
$invalid3 = 'toolong' . str_repeat('a', 250) . '.com'; // Too long

echo "Domain: $invalid1 - " . (is_valid_domain_name($invalid1) ? "Valid" : "Invalid") . "<br>";
echo "Domain: $invalid2 - " . (is_valid_domain_name($invalid2) ? "Valid" : "Invalid") . "<br>";
echo "Domain: $invalid3 - " . (is_valid_domain_name($invalid3) ? "Valid" : "Invalid") . "<br>";
?>

The output of the above code is ?

Domain: tutorialspoint.com - Valid
Domain: sub.example.org - Valid
Domain: test-site.net - Valid
Domain: https://tutorialspoint.com - Invalid
Domain: -invalid.com - Invalid
Domain: toolongaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com - Invalid

How It Works

The validation function uses three regular expression checks:

  • Character validation: Ensures only alphanumeric characters and hyphens are used
  • Overall length: Domain must be between 1-253 characters
  • Label length: Each part separated by dots must be 1-63 characters

Alternative Method

You can also use PHP's built-in filter_var() function for simpler validation ?

<?php
function validate_domain_simple($domain) {
    return filter_var('http://' . $domain, FILTER_VALIDATE_URL) !== false;
}

$test_domains = ['tutorialspoint.com', 'invalid..domain', 'example.org'];

foreach($test_domains as $domain) {
    echo "Domain: $domain - " . (validate_domain_simple($domain) ? "Valid" : "Invalid") . "<br>";
}
?>
Domain: tutorialspoint.com - Valid
Domain: invalid..domain - Invalid
Domain: example.org - Valid

Conclusion

Use regular expressions for strict domain validation or filter_var() for simpler checks. The regex method provides more control over validation rules, while filter_var() offers a quick built-in solution.

Updated on: 2026-03-15T08:46:43+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements