如何编码regex模式来验证json和html5的有效性?

ffvjumwh  于 2022-12-15  发布在  HTML5
关注(0)|答案(1)|浏览(168)

我致力于改进保存在python flask应用程序中的表单配置的验证。表单配置通过json中的API提供。用户可以为他们的表单字段保存regex模式以进行额外的验证。因为我还希望默认情况下防止在普通文本字段中提交任何内容,如url(如名字、姓氏等)我为所有文本字段添加了一个marshmallow正则表达式模式验证:^((?!\:\/\/).)*$
我还希望在前端有一个匹配的regex模式,表单配置文件在这里被呈现为一个实际的html表单,这是由一个小的petite-vue应用程序完成的,它提供表单字段的html模板,并自动将json配置文件中的模式添加到html中。
我注意到:
1.保存在json文件中的表单配置将无效。表单将无法呈现,并出现错误:* “字符串中的转义字符无效。"*.
似乎反斜杠\是json的一个问题。

  1. Firefox中的HTML5模式验证对我的正则表达式模式不满意,并给出以下错误:* “无法检查输入,因为模式不是有效的regexp:正则表达式”*“中标识转义无效。
    斜线似乎也是这里的一个问题。
    我已经发现我可以:
  • urlencode我的正则表达式模式。
  • 转义json文件的反斜杠。

但现在我不得不决定哪种潜在的解决方案是更健壮的选择,以及这两个应用程序中的哪一个是实现它的地方。
所以我需要你帮我决定:

  • 当保存到表单配置时,正则表达式是否应该进行斜杠转义以提供有效的json,并且petite-vue应用程序是否应该取消转义并对模式字符串进行url编码?这似乎是完成任务的正确位置,但如果斜杠的编码/解码不正确,听起来也像是潜在的错误源。
  • 当正则表达式模式被保存到python flask应用程序中时,我是否应该对它进行urlencode编码?我需要验证它是否已经进行了urlencode编码。也许通过解码并与编码版本进行比较?但是我不会两次弄乱这个模式。
  • 有没有更好的解决办法我没想到?
nukf8bse

nukf8bse1#

  • 我会回答我自己的问题。我现在明白了为什么它不清楚,不可复制。希望答案仍然有价值。*
    **tldr;**模式不正确。不需要转义“/”或“:“。
    详细版本

在应用程序流中,模式通过python保存在json文件中(即,它使用json_dumps()并已编码)。在我的测试用例中,我只是将模式复制/粘贴到json文件中,导致json无效。手动转义\时,我要么收到“无效标识转义”错误,要么模式不匹配。

  • 在整个应用程序中,获得字符串及其代表性状态的可靠心智模型是很有帮助的。
  • 研究更多不同的regex风格是很有帮助的。
  • 我以为first comment I found for the error message不适用,但实际上它100%适用。如果我完全接受它,我会节省一些时间。

相关问题