我可以json_encode一个PHP数组并获取值作为JS RegExp对象吗?

时间:2019-06-18 15:14:16

标签: javascript php json regex

我有一些正则表达式模式作为字符串存储在PHP数组中。我需要将它们输出为JavaScript RegExp对象。有没有办法通过使用PHP的json_encode来做到这一点?

示例:

$array = [
   'regex' => '/some-regex/' 
];
return json_encode( $array );

所需的输出:

{"regex": /some-regex/}

当前输出:

{"regex": "/some-regex/"}

2 个答案:

答案 0 :(得分:3)

不直接与json_encode一起使用。 PHP所做的只是创建包含简单标量类型的数组和对象。它无法创建RegExp之类的JS对象或直接调用JS函数。如果您要通过的 all 全部是问题中的样本数据,则可以随时

$array = [
   'regex' => '/some-regex/' 
];
$js_string = '';
foreach($array as $key => $value) $js_string .= '"' . $key . '": new RegExp("' . $value ' "),';
return '{' . $js_string . '}';

那是真正的笨拙代码,当然,如果$array除了正则表达式以外的任何内容,它就会崩溃(并且假定其中的所有内容对于JS都是安全的)。但是,如果这就是全部,那么您必须做...

等等!有更好的方法吗?

确实存在。更好的方法是让json_encode做这件事(可以处理JSON),然后让JS自己创建对象

let regex_list = <?php echo json_encode($array) ?>;
let myregex = {};
regex_list.forEach(function(regex, index) {
    myregex[index] = new RegExp(regex);
});

这是一个更清洁的解决方案。我们不必担心来自PHP的数据,因此JS可以从那里获取数据,并构建一个JS对象,其中包含您要创建的所有RegExp对象

答案 1 :(得分:1)

不,您不能。因为您要通过仅包装数据的JSON结构。 json标准的字符串以“开头”,以“结尾”,否则为数字或等距数组。

我想知道类似的事情。我想根据结果为JS创建一个函数,但在服务器端使用php。通常,当您遇到此问题时,这意味着您必须重新考虑页面/应用程序的结构。

但是,正如他们在对问题的评论中指出的那样,您可能会发现在HTTP请求结束后在本地构建对象的变通方法。

也建议阅读以下内容:Security issues JSON with eval