2009-04-07 61 views
3

我需要一個函數來獲取空href查詢參數名稱,以便以後可以用另一個數組中的值替換它們。之後,在正則表達式失敗,這裏的時間是我使出:如何獲得空href查詢參數?

/** 
* getEmptyQueryParams(URL) 
* Input: URL with href params 
* Returns an array containing all empty href query parameters. 
*/ 
function getEmptyQueryParams(URL) 
{ 

    var params = new Array(); 
    var non_empty_params = new Array(); 
    var regex = /[\?&]([^=]+)=/g; // gets all query params 
    var regex2 = /[\?&]([a-zA-Z_]+)=[\w]/g; // gets non empty query params 

    while((results = regex.exec(URL)) != null) 
    { 
     params.push(results[1]); 
    } 
    while((results = regex2.exec(URL)) != null) 
    { 
     non_empty_params.push(results[1]); 
    } 
    while(non_empty_params.length > 0) 
    { 
     for(y=0;y < params.length;y++) 
     { 
      if(params[y] == non_empty_params[0]) 
      { 
       params.splice(y,1); 
      } 
     } 
     non_empty_params.shift(); 
    } 
    return params; 
} 

它的工作原理,但看起來醜陋的地獄......有沒有更好的辦法做到這一點?任何幫助表示讚賞。

回答

4

我只是測試,這個工作在Opera和CHROM,這兩個瀏覽器我有開放的現在:

function getEmptyQueryParams(URL) 
{ 
    var params = new Array(); 
    var regex = /[\?&]([^=]+)=(?=$|&)/g; // gets non empty query params 
    while((results = regex.exec(URL)) != null) 
    { 
     params.push(results[1]); 
    } 

    return params; 
} 
0

我想你可以用一個匹配空和填充參數的正則表達式來實現。

var regex = /[\?&]([a-zA-Z_]+)=([\w]*)/g; 

while((results = regex.exec(URL)) != null) 
{ 
    if (results[2] == '') 
     params.push(results[1]); 
} 

當然要進行測試。

0
 
$parsedUrl = parse_url($url); 
$query = $parsedUrl['query']; 
$params = array(); 
parse_str($query, $params); 

$emptyParamNames = array(); 
foreach ($params as $k=>$v) { 
    if ($v === "") 
     $emptyParamNames[] = $k; 
} 

編輯:

嘿......認爲這是標記PHP由於某種原因。

好吧,也許它的好處有一天有人:)

0
function get_url_params($url) { 
    $out = array(); 
    $parse = parse_url($url, PHP_URL_QUERY); 
    if($parse) { 
     foreach(explode('&', $parse) as $param) { 
      $elems = explode('=', $param, 2); 
      $out[$elems[0]] = $elems[1]; 
     } 
    } 
    return $out; 
} 

function get_empty_url_params($url) { 
    $out = array(); 
    foreach(get_url_params($url) as $key => $value) 
     if(empty($value)) 
      $out[] = $key; 
    return $out; 
} 
+0

這其實是一個Javascript的問題。但別擔心,你不是唯一犯這個錯誤的人:D – 2009-04-07 21:05:21