簡體   English   中英

我可以json_encode一個PHP數組並獲取值作為JS RegExp對象嗎?

[英]Can I json_encode a PHP array and get values as JS RegExp objects?

我有一些正則表達式模式以字符串形式存儲在PHP數組中。 我需要將它們輸出為JavaScript RegExp對象。 有沒有辦法通過使用PHP的json_encode來做到這一點?

例:

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

所需的輸出:

{"regex": /some-regex/}

電流輸出:

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

不直接使用json_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_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對象

不,你不能。 因為您要通過僅包裝數據的JSON結構。 json標准的字符串以“開頭”,以“結尾”,否則為數字或等距數組。

我想知道類似的事情。 我想根據結果為JS創建一個函數,但在服務器端使用php。 通常,當您遇到此問題時,這意味着您必須重新考慮頁面/應用程序的結構。

但是,正如他們在對問題的評論中指出的那樣,一旦HTTP請求結束,您可能會找到在本地構建對象的解決方法。

還建議您閱讀以下內容: eval的JSON安全問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM