在javascript中sprintf url格式化

时间:2010-01-31 08:19:33

标签: php javascript html printf

如何在javascript中编写一个可以获取当前URL的函数,例如:

http://www.blahblah.com/apps/category.php?pg=1&catId=3021

并根据用户选择选项,将另一个参数附加到网址,如:

http://localhost/buyamonline/apps/category.php?pg=1&catId=3021 &安培;限值为5

但是接下来是:

每次用户选择差异选择时,我都不想继续附加像

这样的内容

http://localhost/buyamonline/apps/category.php?pg=1&catId=3021 & limit = 5& limit = 10 依此类推。

如果没有限制参数,我想总是替换添加它,如果有值,则替换值。

我试图用sprintf来完成这个但是失败了。

我是这样做的:

var w = document.mylimit.limiter.selectedIndex;
var url_add = document.mylimit.limiter.options[w].value;
var loc = window.location.href;
window.location.href = sprintf(loc+"%s="+%s, "&limit", url_add);

2 个答案:

答案 0 :(得分:1)

使用JS实现的正则表达式解决方案更新。

  1. 您可以使用JavaScript replace()方法
  2. 来使用正则表达式
  3. 您可以使用每次构建整个网址而不只是附加参数
  4. 您可以在附加参数
  5. 之前将网址解析为其中的部分

    您更喜欢哪个?

    对于#1:以下应该可以解决问题。但请注意,使用正则表达式解析URL时存在问题。 (参考:stackoverflow.com/questions/1842681 / ...)

    <script type="text/javascript">
      var pattern = "&limit(\=[^&]*)?(?=&|$)|^foo(\=[^&]*)?(&|$)";
      var modifiers = "";
      var txt=new RegExp(pattern,modifiers);
      var str="http://localhost/buyamonline/apps/category.php?pg=1&catId=3021&limit=5";
      document.write(str+"<br/>");
      var replacement = "&limit=10";
      document.write(str.replace(txt, replacement));
    </script>
    

答案 1 :(得分:1)

您可以在下面找到我的 sprintf 实现,您可以在JS代码中使用它来实现您的需求。它的工作方式与C ++ / Java / PHP sprintf 函数类似,但有一些限制:格式说明符的编写方式与%1类似,不支持类型化格式说明符(如%d%s%.2f等。)

String.prototype.sprintf = function() {
  var matches,result = this, p = /%(\d)/g;
  while (matches = p.exec(result)) {
    result = result.replace(matches[0], arguments[parseInt(matches[1]) - 1]);
  }

  return result;
};

<强>语法

  

format 的sprintf(ARG1,ARG2,...);

     

format字符串由零个或多个格式说明符组成,跟随此原型:

     
      
  • a %后跟参数索引,其中第一个参数的索引为。
  •   
     

arg1arg2,...是将替换格式说明符的变量字符串。

     

示例:&#39;快速%1狐狸跳过%2狗&#39; .sprintf(&#39; brown&# 39;,&#39; lazy&#39);

使用示例

var str = 'The size of %1 (%2) exceeds the %3 (%4).';
console.log(str.sprintf('myfile.txt', '100MB', 'max. allowed size', '75MB'));

<强>输出

  

myfile.txt(100MB)的大小超过最大值。允许的大小(75MB)。

注意:如果您需要强大的 sprintf 功能,请检查sprintf是否有JavaScript。