2009-04-07 2 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; 
} 

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

Смежные вопросы