3

我将验证规则存储在 HTML 属性中。

字符串文字中的验证规则如下所示:

'{required:true, minlength:2, maxlength:100}'

要将其转换为我可以使用的 javascript 对象eval(string_literal)

然而,eval是……不愉快。

是否有替代使用 eval 将字符串等对象转换为对象替代方法?

一个限制是我不能使用 JSON。

4

1 回答 1

4

使用来自您信任的来源的控制良好的数据eval很好。解析器的启动成本在最坏的情况下可以忽略不计。自然,使用来自您信任的来源的控制不佳的数据是一个坏主意tmeval

如果你不使用eval,恐怕没有真正的捷径,你必须自己解析字符串。如果它真的只是一个简单的列表,那么split使用正则表达式的几个调用就可以完成,不需要完整的解析器。

快速即用示例(实时副本|来源):

(function() {

  var data = '{required:true, minlength:2, maxlength:100}';
  var entries, index, entry, parts;

  entries = data.substring(1, data.length - 2).split(/, ?/);

  for (index = 0; index < entries.length; ++index) {
    entry = entries[index];
    parts = entry.split(/: ?/);
    display("Key '" + parts[0] + "', value '" + parts[1] + "'");
  }

  function display(msg) {
    var p = document.createElement('p');
    p.innerHTML = String(msg);
    document.body.appendChild(p);
  }

})();

当然,这充满了假设(最值得注意的是,值永远不会是包含逗号或冒号的字符串),但同样,如果数据足够简单,您可以避免使用完整的解析器。

于 2013-04-23T08:32:53.087 回答