我有一些正则表达式模式作为字符串存储在PHP数组中。我需要将它们输出为JavaScript RegExp对象。有没有办法通过使用PHP的json_encode
来做到这一点?
示例:
$array = [
'regex' => '/some-regex/'
];
return json_encode( $array );
所需的输出:
{"regex": /some-regex/}
当前输出:
{"regex": "/some-regex/"}
答案 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