JSON中的正则表达式模式?

Posted

技术标签:

【中文标题】JSON中的正则表达式模式?【英文标题】:Regex pattern in JSON? 【发布时间】:2014-10-15 02:16:14 【问题描述】:

我正在尝试使用单个 JSON 文件来验证前端 (JS) 和后端 (php) 的数据。 我不知道如何将我的模式放在 json 字符串中,PHP 不会转换它。 这是我想使用的(电子邮件验证):

'"name":"email", "pattern":"^[a-z0-9]+(\.[_a-z0-9]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]2,15)$"'

我想模式中有些东西不会被视为字符串?照原样,不会转换为 PHP 中的对象。我不应该逃避任何事情,但我可能错了......

谢谢

编辑:按照 cmets 中的建议进行了尝试:

json_decode('"name":"email", "pattern":"^[a-z0-9]+(\\.[_a-z0-9]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]2,15)$"‌​');  ==> NULL

【问题讨论】:

我不确定你在问什么。 “PHP不会转换它”是什么意思? PHP的结果是什么?使用什么代码? json_decode(mystring) 不。也不是重复的,我的对象结构很好。 你的对象结构是的,你的语法不是。 jsonlint.com @deceze : jsonlint 有效 ljacqu 的答案。如果所有者的问题仍然存在,则它来自他的代码的另一部分。 【参考方案1】:

问题是反斜杠\。用两个来表示有一个,它会很好地工作:

"name":"email","pattern":"^[a-z0-9]+(\\.[_a-z0-9]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]2,15)$"

以上是有效的 JSON,但作为 PHP 字符串会引起麻烦,因为\\ 在传递给json_decode() 之前已经被解释为一个\,我们又回到了开始的地方。正如 deceze 在 cmets 中所指出的,这可以通过添加四个反斜杠来解决:

"name":"email","pattern":"^[a-z0-9]+(\\\\.[_a-z0-9]+)*@[a-z0-9-]+(\\\\.[a-z0-9-]+)*(\\\\.[a-z]2,15)$"

或者立即将file_get_contents()(或类似)的内容传递给json_decode()

【讨论】:

肯定有别的,我也试过了。仍然不会解析 json_decode('"name":"email", "pattern":"^[a-z0-9]+(\\.[_a-z0-9]+)*@[ a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[az]2,15)$"'); ==> 空 @Eric 如果您将其编写为 PHP 字符串文字(例如,而不是从文件中读取),则每个反斜杠都需要一个额外的反斜杠。 确实,\ 在 PHP 中必须是 \\\\。 "name":"email","pattern":"^[a-z0-9]+(\\\\.[_a-z0-9]+)*@[a-z0-9-]+(\\\\.[a-z0-9-]+)*(\\\\.[a-z]2,15)$" 有效。但我帖子中的那个是有效的 JSON。我会用 javascript 做一个测试,稍后我会更新我的帖子。 @Eric Quadruple 用于每个反斜杠。提示:将纯正则表达式写入文件,然后:var_export(json_encode(array('pattern' => file_get_contents('regex.txt')))); 这将“逆向工程”有效语法。

以上是关于JSON中的正则表达式模式?的主要内容,如果未能解决你的问题,请参考以下文章

在 json 模式中使用正则表达式来验证没有空格的字符串?

正则表达式怎么提取json中的value?

正则表达式没有想象中的那么难

如何使用 Python 处理 JSON 文件中的正则表达式字符串

如何使用正则表达式搜索 JSON 哈希?

Jmeter中的关联(正则表达式+json)-空谷幽兰