我可以在 JSON 模式模式(正则表达式)中使用 unicode 标志吗?
Can I use the unicode flag within a JSON schema pattern (regular expression)?
有没有办法设置 u
标志,从而启用 unicode 正则表达式模式?
我需要匹配 Straßer
、Müller
、Adèle
、Yiğit
等名称。
如果我可以在 JSON 模式中使用纯 JS,/\p{L}+/u
或 new RegExp('\p{L}+', 'u')
将适用于我的情况。
6.3.3. pattern
The value of this keyword MUST be a string. This string SHOULD be a valid regular expression, according to the ECMA-262 regular expression dialect.
我发现了这个:How to match a Unicode letter with a JSON Schema pattern (regular expression)。结果太迷惑了。 JavaScript/ECMA 如果设置了 u
标志,脚本可以按预期处理 \p{L}
。
JSON Schema 的 2020-12 版本(您引用的)有一个外部更详细的变更日志(信息性),其中详细说明了以下可能从规范本身看不出来的内容...
Regular expressions are now expected (but not strictly required) to
support unicode characters. Previously, this was unspecified and
implementations may or may not support this unicode in regular
expressions. - https://json-schema.org/draft/2020-12/release-notes.html
如果您使用的实现支持 JSON 架构草案 2020-12,您应该能够在正则表达式中使用 unicode,因为应该启用该标志。
您不能使用正则表达式指定标志,因为对正则表达式支持的实际要求只是应该而非必须。在规范世界中,这意味着您不能依赖它来实现互操作。如果您只打算在内部使用这些模式并且您对其进行了测试并且它有效(它应该听起来像您正在使用 js/node),那么您可能没问题,但是与其他人共享模式可能没有按预期工作。
其他语言的一些实现使用 ECMA-262 正则表达式引擎的端口,但并非全部都使用,有时没有可用的端口。
有没有办法设置 u
标志,从而启用 unicode 正则表达式模式?
我需要匹配 Straßer
、Müller
、Adèle
、Yiğit
等名称。
/\p{L}+/u
或 new RegExp('\p{L}+', 'u')
将适用于我的情况。
6.3.3. pattern
The value of this keyword MUST be a string. This string SHOULD be a valid regular expression, according to the ECMA-262 regular expression dialect.
我发现了这个:How to match a Unicode letter with a JSON Schema pattern (regular expression)。结果太迷惑了。 JavaScript/ECMA 如果设置了 u
标志,脚本可以按预期处理 \p{L}
。
JSON Schema 的 2020-12 版本(您引用的)有一个外部更详细的变更日志(信息性),其中详细说明了以下可能从规范本身看不出来的内容...
Regular expressions are now expected (but not strictly required) to support unicode characters. Previously, this was unspecified and implementations may or may not support this unicode in regular expressions. - https://json-schema.org/draft/2020-12/release-notes.html
如果您使用的实现支持 JSON 架构草案 2020-12,您应该能够在正则表达式中使用 unicode,因为应该启用该标志。
您不能使用正则表达式指定标志,因为对正则表达式支持的实际要求只是应该而非必须。在规范世界中,这意味着您不能依赖它来实现互操作。如果您只打算在内部使用这些模式并且您对其进行了测试并且它有效(它应该听起来像您正在使用 js/node),那么您可能没问题,但是与其他人共享模式可能没有按预期工作。
其他语言的一些实现使用 ECMA-262 正则表达式引擎的端口,但并非全部都使用,有时没有可用的端口。