Javascript 验证 - 检查字符串是否是正确的对象

Javascript validation - Check if a string is a correct object

我有一个文本区域,我需要在其中放置一个类似的对象

[{
  name: 'digitrust',
  params: {
    init: {
      member: 'example_member_id',
      site: 'example_site_id'
    },
    callback: function(digiTrustResult) {
      if (digiTrustResult.success) {
        var el = document.getElementById('dtidOutput');
        console.log('Success', digiTrustResult.identity)
      } else {
        console.error('Digitrust init failed')
      }
    }
  },
  storage: {
    type: 'html5',
    name: 'pbjsdigitrust',
    expires: 60
  }
}]

我将这个字符串保存在 mysql 数据库中,然后在 javascript 对象中使用 php (laravel)

打印它
@if(!empty($useridobj))
try {
    useridobj = {!! $useridobj !!};
    if(typeof useridobj != 'object'){
        useridobj = '';
    }
} catch(err) {
    useridobj = ''
}
@endif

如果我在此文本区域中放置正确的对象,一切正常。但是如果我这样写错了

[{name:'digitrust',para]

控制台return一个错误。

所以我想先验证字段,在 javascript (angular.js) 中。我尝试类似的东西

if(!eval("var this_useridobj = "+ this.form.get("useridobj").value)){
  this.form.get("useridobj").setErrors({ server: "UserId Object is not an object!" });
  console.warn(this.form.get("useridobj"));
  return false;
}

没用。有人可以帮我吗?

谢谢你

也许您应该在服务器端进行验证,上面示例中的 evalFunction 存在一些安全问题,请参阅 this。这里有一个可能的方法,但是 Function 执行任何操作:

document.getElementById("validate").addEventListener("click",()=>{
const json = document.getElementById("json").value;
const valid = (()=>{
    try {
      return (typeof (Function("return "+json))() === 'object')?true:false;
    }
    catch(error) {
      return false;
}})();

console.log(valid)
});

//Try alert("something") in the textarea
<textarea id="json">{prop:[1,2,3}</textarea>
<button id="validate">
validate
</button>