I'm looking for a regex that matches valid, online URLs only.
For example:
exmaple.com
http://exmaple.com
https://exmaple.com
www.exmaple.com
http://www.example.com
https://www.example.com
And special domains and extensions like:
t.co
example.deals
sh.party
And so on, but won't match all the complicated stuff like ftp
, get
queries or URLs like 2.3.3.1
.
I've been using '#(www\\.|https?://)?[a-z0-9]+\\.[a-z0-9]{2,4}\\S*#i'
but It detects dates , for example 3.3.2017
.
I need this becuase I apply get_headers
to every found URL, and when I do get_headers
for invalid URLs like a date, I get:
get_headers(http://03.03.2017): failed to open stream: Connection timed out
TL;DR: I'm looking for a Regex that matches only URLs you can apply get_headers()
on.
Thanks for helping!
I would say Regex is not the best solution for checking valid URL. It would be better to use FILTER_VALIDATE_URL :
<?php
$url = "https://www.w3schools.com";
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
echo("$url is a valid URL");
} else {
echo("$url is not a valid URL");
}
?>
#(https?:\/\/)?([a-z0-9_~-]+\.)+[a-z]{2,5}(\/\S*)?#i
EDIT: Third try: Optional http or https at start. After that follows at least one domain name and a dot, then a top-level domain of 2-5 letters and an optional tail of a backslash and additional non-space characters.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.