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中的正则表达式模式?的主要内容,如果未能解决你的问题,请参考以下文章