JSON中的正则表达式模式

Regex pattern in JSON?

本文关键字:模式 正则表达式 JSON      更新时间:2023-09-26

我试图有一个单一的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中转换为对象。我不应该逃避任何东西,但我可能错了…

感谢

编辑:按照评论中的建议试过了:

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

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

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

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

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

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