Javascript 我可以对PHP数组进行json_编码并将值作为JS RegExp对象获取吗?
我有一些正则表达式模式作为字符串存储在PHP数组中。我需要将它们作为JavaScript RegExp对象输出。使用PHP的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标准的字符串以
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()
是没有必要的。