使用PHP从JS代码中删除空格

时间:2014-05-15 10:21:26

标签: php

我有以下生成的JS代码:

    var companies = [
      {
        name:   'foo bar',
        points: [
          {
            latitude: 123,
            longitude: 456
          }
        ]
      } ,              {
        name:   'foo  bar',
        points: [
          {
            latitude: 123,
            longitude: 456
          }
        ]
      } ,              {
        name:   'foo   bar',
        points: [
          {
            latitude: 123,
            longitude: 456
          }
        ]
      } ,              {
        name:   'foo    bar',
        points: [
          {
            latitude: 123,
            longitude: 456
          }
        ]
      }           ];

是的,它很难看 - 在每一行都有额外的缩进等等。因为它将被渲染,我想用PHP删除它的空格。预期输出应为:

var companies=[{name:'foo bar',points:[{latitude:123,longitude:456}]},{name:'foo  bar',points:[{latitude:123,longitude:456}]},{name:'foo   bar',points:[{latitude:123,longitude:456}]},{name:'foo    bar',points:[{latitude:123,longitude:456}]}];

从JS代码中删除空格的最有效方法是什么?

3 个答案:

答案 0 :(得分:1)

在前面的答案的基础上,这看起来像你需要的正则表达式:

((?<=\=|\,|\:|\]|\[|\{|\})\s+)|(\s+(?=\=|\,|\:|\]|\[|\{|\}))|(^\s+)

在php中使用:

preg_replace('/((?<=\=|\,|\:|\]|\[|\{|\})\s+)|(\s+(?=\=|\,|\:|\]|\[|\{|\}))|(^\s+)/', '', $str);

说明:

(?<=\=|\,|\:|\]|\[|\{|\})\s+)

匹配一个或多个空格\ s +跟{} [],:=字符

(\s+(?=\=|\,|\:|\]|\[|\{|\})

匹配一个或多个空格\ s +前面{} [],:=字符

(^\s+)

匹配起始和结束空格^ \ s +

用虚无替换全部

看到它的实际效果: http://www.phpliveregex.com/p/5eS

答案 1 :(得分:0)

如果它总是json字符串,你可以使用 $json_string = json_encode($data, JSON_PRETTY_PRINT);

答案 2 :(得分:-1)

这太苛刻了,你需要在更多情况下进行测试。 更新:

<?php
         $str = "var companies = [
                  {
                    name:   'foo bar',
                    points: [
                      {
                        latitude: 123,
                        longitude: 456
                      }
                    ]
                  } //...
            ];";

            echo preg_replace(
              array(
                '#\]\s+#' , '#\[\s+#' , '#\{\s+#', '#\}\s+#','#\s+\]#' , '#\s+\[#' , '#\s+\{#', '#\s+\}#' , '#\,\s+#' , '#\:\s+#','#\s+\,#' , '#\s+\:#'),
              array(
                ']' , '[' , '{', '}' ,']' , '[' , '{', '}' , ','  , ':',','  , ':'), $str);