XML 使用带有“|”的 XSD(正则表达式)进行验证运算符(Notepad++ 插件)
XML validation using XSD (regex) with "|" operator (Notepad++ plugin)
我正在使用以下不是很严格的 XSD 验证(正则表达式)来检查字符串是否包含 https
或相对 URL 而不是 http
.
<xs:attribute name="src">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="(.{4}[^:].*)|(.{1,4})"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
样本XML:
Succeeds (suppose to fail) <?xml version="1.0" encoding="UTF-8"?><html src="http://www.whosebug.com" />
Succeeds (as expected) <?xml version="1.0" encoding="UTF-8"?><html src="https://www.whosebug.com" />
Succeeds (as expected) <?xml version="1.0" encoding="UTF-8"?><html src="relative/url.html" />
当我使用在线验证器验证时,这是按预期工作的:
当我用 Notepad++ XML 插件验证时,这是失败的。该表达式虽然可以单独使用 "(.{4}[^:].*)
" 和 "(.{1,4})"
,但不能与 "|"
运算符(或)一起使用。
XSD 验证在带有 OR 运算符的 Notepad++ 上的工作方式是否不同?是否有修复或我在这里遗漏了什么?
这看起来是 XMLLint (Linux) 的一个问题,我的一位同事也证实了这一点。
我认为仅使用 .
没有意义,因为我们正在检查确切的字符序列。要要求所有链接以 https
而不是 http
开头,您可以使用:
<xs:pattern value="https.*"/>
甚至
<xs:pattern value="https://.*"/>
编辑:
对于像 relative/url.html
这样的相对 URL,您可以添加 (?:[^/]*/)*[^/]+\.[^.]+
子模式:
<xs:pattern value="https://.*|(?:[^/]*/)*[^/]+\.[^.]+"/>
我正在使用以下不是很严格的 XSD 验证(正则表达式)来检查字符串是否包含 https
或相对 URL 而不是 http
.
<xs:attribute name="src">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="(.{4}[^:].*)|(.{1,4})"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
样本XML:
Succeeds (suppose to fail) <?xml version="1.0" encoding="UTF-8"?><html src="http://www.whosebug.com" />
Succeeds (as expected) <?xml version="1.0" encoding="UTF-8"?><html src="https://www.whosebug.com" />
Succeeds (as expected) <?xml version="1.0" encoding="UTF-8"?><html src="relative/url.html" />
当我使用在线验证器验证时,这是按预期工作的:
当我用 Notepad++ XML 插件验证时,这是失败的。该表达式虽然可以单独使用 "(.{4}[^:].*)
" 和 "(.{1,4})"
,但不能与 "|"
运算符(或)一起使用。
XSD 验证在带有 OR 运算符的 Notepad++ 上的工作方式是否不同?是否有修复或我在这里遗漏了什么?
这看起来是 XMLLint (Linux) 的一个问题,我的一位同事也证实了这一点。
我认为仅使用 .
没有意义,因为我们正在检查确切的字符序列。要要求所有链接以 https
而不是 http
开头,您可以使用:
<xs:pattern value="https.*"/>
甚至
<xs:pattern value="https://.*"/>
编辑:
对于像 relative/url.html
这样的相对 URL,您可以添加 (?:[^/]*/)*[^/]+\.[^.]+
子模式:
<xs:pattern value="https://.*|(?:[^/]*/)*[^/]+\.[^.]+"/>