2 回答
TA贡献1911条经验 获得超7个赞
不直接用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您要创建的所有对象
TA贡献1829条经验 获得超7个赞
不,你不能。因为您正在传递仅包装数据的 JSON 结构。json 标准的字符串以“开头并以”结尾,否则它是一个数字或数组。
我想知道类似的事情。我想根据结果为 JS 创建一个函数,但在服务器端使用 php。通常,当您遇到此问题时,意味着您必须重新考虑页面/应用程序的结构。
但是,正如他们在对您的问题的评论中指出的那样,一旦 HTTP 请求结束,您可能会找到在本地构建对象的解决方法。
- 2 回答
- 0 关注
- 126 浏览
添加回答
举报