2009-04-07 4 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

私はちょうどこれはオペラとCHROM、私は今開いている2つのブラウザで動作することをテストした:

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

私はあなたが空といっぱいのパラメータと一致する1つの正規表現でそれを行うことができると思います。

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; 
} 

EDIT:

ふむが...これはいくつかの理由で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の質問。しかし、心配しないで、あなたは間違いを犯す唯一の人ではありません:P –

+0

D'oh。面白いです。 – chaos

関連する問題