我将验证规则存储在 HTML 属性中。
字符串文字中的验证规则如下所示:
'{required:true, minlength:2, maxlength:100}'
要将其转换为我可以使用的 javascript 对象eval(string_literal)
然而,eval
是……不愉快。
是否有替代使用 eval 将字符串等对象转换为对象的替代方法?
一个限制是我不能使用 JSON。
我将验证规则存储在 HTML 属性中。
字符串文字中的验证规则如下所示:
'{required:true, minlength:2, maxlength:100}'
要将其转换为我可以使用的 javascript 对象eval(string_literal)
然而,eval
是……不愉快。
是否有替代使用 eval 将字符串等对象转换为对象的替代方法?
一个限制是我不能使用 JSON。
使用来自您信任的来源的控制良好的数据eval
很好。解析器的启动成本在最坏的情况下可以忽略不计。自然,使用来自您不信任的来源的控制不佳的数据是一个坏主意tm。eval
如果你不使用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);
}
})();
当然,这充满了假设(最值得注意的是,值永远不会是包含逗号或冒号的字符串),但同样,如果数据足够简单,您可以避免使用完整的解析器。