[英]Url validation with regex for old php version
注意 :我使用的是較早的PHP版本,因此
FILTER_VALIDATE_URL
目前不可用。
經過許多次搜索后,我仍然找不到能夠涵蓋所有URL結構可能性的確切答案,但最后我將使用這種方式:
我正在使用以下功能
1)獲得適當方案的功能
function convertUrl ($url){
$pattern = '#^http[s]?://#i';
if(preg_match($pattern, $url) == 1) { // this url has proper scheme
return $url;
} else {
return 'http://' . $url;
}
}
2)有條件檢查是否為URL
if (preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $url)) {
echo "URL is valid";
}else {
echo "URL is invalid<br>";
}
你猜怎么了!? 它非常適合所有這些可能性:
$url = "google.com";
$url = "www.google.com";
$url = "http://google.com";
$url = "http://www.google.com";
$url = "https://google.com";
$url = "https://www.codgoogleekarate.com";
$url = "subdomain.google.com";
$url = "https://subdomain.google.com";
但是仍然有這種情況
$url = "blahblahblahblah";
函數convertUrl($url)
會將其轉換為$url = "http://blahblahblahblah";
那么正則表達式會認為它是有效URL,而實際上不是!
我如何編輯它,以便它不會傳遞具有此結構的URL http://blahblahblahblah
如果要驗證 ,請在正則添加檢查點是否包含點(。)字符。
Note: http://blahblahblah is a valid url as is http://localhost
嘗試這個:
if (preg_match("/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/", $url)) {
echo "URL is valid";
}else {
echo "URL is invalid<br>";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.