簡體   English   中英

使用正則表達式對舊php版本進行網址驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM