gpt4 book ai didi

javascript - 如何检查字符串是否是 php 中的 javascript 对象?

转载 作者:行者123 更新时间:2023-12-03 01:25:48 25 4
gpt4 key购买 nike

我这里有一个字符串:

{eventStart: "2018/12/01",eventEnd: "2018/12/01"}

我想检查这是否可以生成有效的 js 对象。就像如果想要进行 ajax 调用我们这样写:

$.ajax({
type: "post",
url: "something",
data: data
})

如果我们错过了逗号或引号,则存在语法错误。我想在 php 中检查该字符串是否可以生成有效的 js 对象。

以上示例,将仅检查

{
type: "post",
url: "something",
data: data
}

编辑

我可以检查有效的 json,但对于 json_decode 函数中的有效 json,它应该是这样的:

{
"type": "post",
"url": "something",
"data": data(valid object here)
}

但是当我们编写代码时,我们就是这样做的

{
type: "post",
url: "something",
data: data
}

最佳答案

您不应该在 PHP 中执行此操作,而应该在浏览器或任何其他适当的 JavaScript 解释器中执行此操作。

在 PHP 中执行此操作最终可能类似于构建您自己的 JavaScript 解析器。

我的建议是:

  1. 安装 Node.js
  2. 运行此 PHP 脚本:

    $obj = '{eventStart: "2018/12/01",eventEnd: "2018/12/01"}';
    $cmd = "/usr/bin/node -e \"var a = $obj; console.log(typeof a);\"";
    $ph = proc_open($cmd, [
    [ "pipe", "r" ],
    [ "pipe", "w" ],
    [ "pipe", "w" ]
    ], $pipes);

    $error = stream_get_contents($pipes[2]);
    $result = stream_get_contents($pipes[1]);
    fclose($pipes[0]);
    fclose($pipes[1]);
    fclose($pipes[2]);
    proc_close($ph);

    if (empty(trim($error)) && trim($result) == "object") {
    echo "Yay it's an object";
    } else if (!empty($error)) {
    echo "Not valid JS syntax";
    } else {
    echo "It's a ".trim($result)." instead of an object";
    }

或者只需在浏览器中添加检查,例如:

<?php
$obj = '{eventStart: "2018/12/01",eventEnd: "2018/12/01"}';
?>
<script>
try {
var parameter = <?=$obj?>;
if (typeof parameter !== 'object') {
throw new Error('Not an object');
}
} catch (e) {
//not valid
}
</script>

注意:我刚刚意识到这可能是 XY 问题。

虽然 {eventStart: "2018/12/01",eventEnd: "2018/12/01"} 可能是一个有效的 JS 对象,但跨平台共享 JS 对象的最佳方法是使用 JSON (JavaScript 对象表示法的缩写)。这里最好的解决方案是确保传递给客户端的任何内容都是 json 编码的。例如:

<?php
//Note how this is a PHP assoc array
$obj = [ "eventStart" => "2018/12/01", "eventEnd" => "2018/12/01" ];
?>
<script>
var object = <?= json_encode($obj); ?>;
</script>

关于javascript - 如何检查字符串是否是 php 中的 javascript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51553110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com