我正在寻找一个允许我验证 json 的正则表达式。
我对正则表达式非常陌生,我知道用正则表达式解析很糟糕,但它可以用来验证吗?
是的,可以进行完整的正则表达式验证。
大多数现代正则表达式实现都允许递归正则表达式,它可以验证完整的 JSON 序列化结构。这json.org 规范 http://json.org/使其变得非常简单。
$pcre_regex = '
/
(?(DEFINE)
(?<number> -? (?= [1-9]|0(?!\d) ) \d+ (\.\d+)? ([eE] [+-]? \d+)? )
(?<boolean> true | false | null )
(?<string> " ([^"\\\\]* | \\\\ ["\\\\bfnrt\/] | \\\\ u [0-9a-f]{4} )* " )
(?<array> \[ (?: (?&json) (?: , (?&json) )* )? \s* \] )
(?<pair> \s* (?&string) \s* : (?&json) )
(?<object> \{ (?: (?&pair) (?: , (?&pair) )* )? \s* \} )
(?<json> \s* (?: (?&number) | (?&boolean) | (?&string) | (?&array) | (?&object) ) \s* )
)
\A (?&json) \Z
/six
';
它在 PHP 中运行得很好PCRE 函数 http://php.net/preg_match。应该可以在 Perl 中不加修改地工作;并且当然可以适用于其他语言。它也成功了JSON 测试用例 http://www.json.org/JSON_checker/test/pass1.json.
更简单的 RFC4627 验证
一种更简单的方法是最小一致性检查,如RFC4627,第 6 节 https://datatracker.ietf.org/doc/html/rfc4627#section-6。然而,它只是作为安全测试和基本的无效预防措施:
var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
text.replace(/"(\\.|[^"\\])*"/g, ''))) &&
eval('(' + text + ')');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)