【问题标题】:Can I use the unicode flag within a JSON schema pattern (regular expression)?我可以在 JSON 模式模式(正则表达式)中使用 unicode 标志吗?
【发布时间】:2021-10-20 17:25:39
【问题描述】:

有没有办法设置 u 标志从而启用 unicode 正则表达式模式?

我需要匹配StraßerMüllerAdèleYiğit 等名称。

如果我可以在 JSON 模式中使用纯 JS,/\p{L}+/unew RegExp('\\p{L}+', 'u') 将适用于我的情况。

specification

6.3.3。模式
此关键字的值必须是字符串。根据 ECMA-262 正则表达式方言,此字符串应该是有效的正则表达式。

我发现了这个:How to match a Unicode letter with a JSON Schema pattern (regular expression)。结果太糊涂了。如果设置了u 标志,JavaScript/ECMA 脚本可以按预期处理\p{L}

【问题讨论】:

    标签: json regex unicode jsonschema letter


    【解决方案1】:

    JSON Schema 的 2020-12 版本(您引用)有一个外部更详细的变更日志(信息性),其中详细说明了以下内容,从规范本身来看可能并不明显......

    现在期望(但不是严格要求)正则表达式 支持unicode字符。以前,这是未指定的,并且 实现可能会或可能不会定期支持此 unicode 表达式。 - https://json-schema.org/draft/2020-12/release-notes.html

    如果您使用支持 JSON Schema Draft 2020-12 的实现,您应该能够在正则表达式中使用 unicode,因为应该启用该标志。

    您不能使用正则表达式指定标志,因为对正则表达式支持的实际要求只是应该而不是必须。在规范世界中,这意味着您不能依赖它来实现互操作。如果您只打算在内部使用模式并且您对其进行测试并且它可以工作(它应该听起来像您正在使用 js/node),那么您可能会没事,但与其他人共享模式可能无法正常工作正如预期的那样。

    其他语言的一些实现使用 ECMA-262 正则表达式引擎的一个端口,但并非全部都这样做,有时没有可用的端口。

    【讨论】:

    • 我们正在评估 JSON Schema 作为 XML Schema 的替代方案。平台或语言尚未定义。我们有用 Java 和 C# 构建的系统。架构验证用于内部服务器到服务器的通信以同步异构系统。
    • 这不是替代品。如果您有 XML,则为 XML Schema;如果您有 JSON,则为 JSON Schema。为什么要考虑改变?
    • 我们正在更改消息交换的数据格式。 JSON 因其轻便而受到使用微控制器的员工的青睐。通过使用 JSON,我们在内部获得了更同质的通信标准。我们不需要 XML 的文本标记功能。该消息由几个数据字段组成。因此 JSON 非常适合该用例。我喜欢和 Rust 一起工作。目前还没有 Schema XML Rust 库。但是有一个 JSON Schema lib =) 对于没有编程知识的人来说,JSON 似乎更具可读性。
    • 好的。鉴于此,我不会依赖支持 unicode 的正则表达式引擎。如果您可以针对您的模式构建一个测试套件,您将受益,您可以使用多种编程语言运行该测试套件,以确保您的模式与您期望的一样可互操作。您可以通过在 JSON 中定义一组测试来做到这一点,就像我们为 JSON Schema 本身所做的那样。无论如何,最好测试您的架构是否符合您的期望。
    • 如果您选择的 JSON Schema 评估程序不支持 unicode 字符匹配,您可以发送一个补丁来添加该支持 :) 开源软件在相关方的贡献中蓬勃发展,以添加功能和修复错误。
    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2016-09-30
    相关资源
    最近更新 更多