首页 > 解决方案 > 我可以 json_encode 一个 PHP 数组并将值作为 JS RegExp 对象获取吗?

问题描述

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

例子:

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

期望的输出:

{"regex": /some-regex/}

电流输出:

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

标签: javascriptphpjsonregex

解决方案


不直接用json_encode. PHP 所做的只是创建包含简单标量类型的数组和对象。它不能像创建 JS 对象RegExp或直接调用 JS 函数一样。如果您要传递的只是问题中的样本数据,那么您总是可以做

$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对象包含您要创建的所有对象


推荐阅读