URL regex PHP
URL regular expressions can be used to verify if a string has a valid URL format as well as to extract an URL from a string.
URL regex that starts with HTTP or HTTPS
HTTP and HTTPS URLs that start with protocol can be validated using the following regular expression
"/^https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)$/"
Enter a text in the input above to see the result
Example code in Python:
// Validate if a string is a valid URL format
$url_validation_regex = "/^https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)$/";
echo preg_match($url_validation_regex, ''); // returns 1
// Extract URL from a string
$extract_url_pattern = "/https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)/";
$string_to_match = 'You can view more details at https://uibakery.io or just ping via email.';
preg_match_all($extract_url_pattern, $string_to_match, $matches);
print_r($matches[0])// matches[0] is ['']
URL regex that doesn’t start with HTTP or HTTPS
The regular expression to validate URL without protocol is very similar:
"/^[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)$/"
Enter a text in the input above to see the result
Example code in Python:
// Validate if a string is a valid URL format without protocol
$url_validation_regex = "/^[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)$/";
echo preg_match($url_validation_regex, 'uibakery.io'); // returns 1
// Extract URL without protocol from a string
$extract_url_pattern = "/[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)/";
$string_to_match = 'You can view more details at uibakery.io or just ping via email.';
preg_match_all($extract_url_pattern, $string_to_match, $matches);
print_r($matches[0])// matches[0] is ['uibakery.io']
Notes on URL validation
The above-mentioned regular expressions only cover the most commonly used types of URLs with domain names. If you have some more complex cases you might need a different solution.