Javascript 我可以对PHP数组进行json_编码并将值作为JS RegExp对象获取吗?

Javascript 我可以对PHP数组进行json_编码并将值作为JS RegExp对象获取吗?,javascript,php,json,regex,Javascript,Php,Json,Regex,我有一些正则表达式模式作为字符串存储在PHP数组中。我需要将它们作为JavaScript RegExp对象输出。使用PHP的json\u encode有什么方法可以做到这一点吗 例如: $array=[ “正则表达式”=>“/一些正则表达式/” ]; 返回json_encode($array); 期望输出: {“regex”:/some regex/} 电流输出: {“regex”:“/some regex/”} 不,你不能。因为您要传递的是JSON结构,它只包装数据。json标准的字符串以

我有一些正则表达式模式作为字符串存储在PHP数组中。我需要将它们作为JavaScript RegExp对象输出。使用PHP的
json\u encode
有什么方法可以做到这一点吗

例如:

$array=[
“正则表达式”=>“/一些正则表达式/”
];
返回json_encode($array);
期望输出:

{“regex”:/some regex/}
电流输出:

{“regex”:“/some regex/”}

不,你不能。因为您要传递的是JSON结构,它只包装数据。json标准的字符串以“开头,以”结尾,否则它是一个数字或istance数组

我也在想一件类似的事情。我想为JS创建一个函数,但基于结果,在服务器端使用php。通常当你面对这个问题时,这意味着你必须重新思考一下你的页面/应用程序的结构

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


我还建议您阅读以下内容:

不,您不能。因为您要传递的是JSON结构,它只包装数据。json标准的字符串以“开头,以”结尾,否则它是一个数字或istance数组

我也在想一件类似的事情。我想为JS创建一个函数,但基于结果,在服务器端使用php。通常当你面对这个问题时,这意味着你必须重新思考一下你的页面/应用程序的结构

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


还建议您阅读以下内容:

不要直接使用
json\u encode
。PHP所做的就是创建包含简单标量类型的数组和对象。它不能创建像
RegExp
这样的JS对象,也不能直接调用JS函数。如果你要通过的只是问题中的样本数据,那么你总是可以做到的

$array = [
   'regex' => '/some-regex/' 
];
$js_string = '';
foreach($array as $key => $value) $js_string .= '"' . $key . '": new RegExp("' . $value ' "),';
return '{' . $js_string . '}';
这是非常笨拙的代码,当然,如果
$array
包含除正则表达式以外的任何内容(并且它假设其中的所有内容对JS都是安全的),它就会崩溃。但如果这就是你要做的

等待有更好的办法吗? 确实有。更好的方法是让
json\u encode
做自己的事情(它有点像是用来处理json的),然后让JS自己创建对象

let regex_list = <?php echo json_encode($array) ?>;
let myregex = {};
regex_list.forEach(function(regex, index) {
    myregex[index] = new RegExp(regex);
});
let regex_list=;
设myregex={};
regex_list.forEach(函数(regex,索引){
myregex[index]=新的RegExp(regex);
});

这是一个更干净的解决方案。我们不必担心来自PHP的数据,因此JS可以从那里获取数据,并构建一个JS对象,该对象包含您想要创建的所有
RegExp
对象,而不是直接使用
json\u encode
。PHP所做的就是创建包含简单标量类型的数组和对象。它不能创建像
RegExp
这样的JS对象,也不能直接调用JS函数。如果你要通过的只是问题中的样本数据,那么你总是可以做到的

$array = [
   'regex' => '/some-regex/' 
];
$js_string = '';
foreach($array as $key => $value) $js_string .= '"' . $key . '": new RegExp("' . $value ' "),';
return '{' . $js_string . '}';
这是非常笨拙的代码,当然,如果
$array
包含除正则表达式以外的任何内容(并且它假设其中的所有内容对JS都是安全的),它就会崩溃。但如果这就是你要做的

等待有更好的办法吗? 确实有。更好的方法是让
json\u encode
做自己的事情(它有点像是用来处理json的),然后让JS自己创建对象

let regex_list = <?php echo json_encode($array) ?>;
let myregex = {};
regex_list.forEach(function(regex, index) {
    myregex[index] = new RegExp(regex);
});
let regex_list=;
设myregex={};
regex_list.forEach(函数(regex,索引){
myregex[index]=新的RegExp(regex);
});

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

您不能使用PHP创建JavaScript数据结构,不。
{“regex”:/some regex/}
不是有效的JSON。即使它是字符串,也可以通过在的构造函数中传递来使用它。示例:
let pattern=new RegExp(theRegexString)
,然后使用
pattern
而不是regex.@abracadver(yikes:-)-从OPs术语派生,一旦从JSON转换为JavaScript对象,使用
{regex:new RegExp(/some/)}
是有效的。换句话说,将一个RegExp对象作为对象属性。继续使用
new Regexp()
是没有必要的。您不能使用PHP创建JavaScript数据结构,不。
{“regex”:/some regex/}
不是有效的JSON。通过在的构造函数中传递它,您仍然可以使用它,即使它是字符串。示例:
let pattern=new RegExp(theRegexString)
,然后使用
pattern
而不是regex.@abracadver(yikes:-)-从OPs术语派生,一旦从JSON转换为JavaScript对象,使用
{regex:new RegExp(/some/)}
是有效的。换句话说,将一个RegExp对象作为对象属性。继续使用
newregexp()
是没有必要的。