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