RFC 3986 için URI'lere doğrulayarak oldukça basittir. Kullanabileceğiniz bir regular expression like:
/^ # Start at the beginning of the text
([a-z][a-z0-9\*\-\.]*):\/\/ # The scheme
(?: # Userinfo (optional)
(?:(?:[\w\.\-\+!$&'\(\)*\+,;=]|%[0-9a-f]{2})+:)*
(?:[\w\.\-\+%!$&'\(\)*\+,;=]|%[0-9a-f]{2})+@
)?
(?: # The domain
(?:[a-z0-9\-\.]|%[0-9a-f]{2})+ # Domain name or IPv4
|(?:\[(?:[0-9a-f]{0,4}:)*(?:[0-9a-f]{0,4})\]) # or IPv6
)
(?::[0-9]+)? # Server port number (optional)
(?:[\/|\?]
(?:[\w#!:\.\?\+=&@!$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2}) # The path (optional)
*)?
$/xi
Ancak, bu Uluslararası Alan Adları bulunanlar gibi Uluslararası karakterler için çalışmaz. Örneğin, http:// 例え. テスト / メイン ページ.
Gibi bir şey kullanarak
filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED);
ya bu çalışmıyor. Sorun kullanılan karakterleri ile ilgisi yoktur.
PHP URI doğrulamak için iyi bir yolu var mı?