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 關注
- 158 瀏覽
添加回答
舉報