这是有效的,但使用模式和 maxLength 来重复长度约束以强制执行它:
<xsd:simpleType name="MyType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]{0,10}" />
<xsd:maxLength value="10" />
</xsd:restriction>
</xsd:simpleType>
仅模式就足够了:
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]{0,10}" />
</xsd:restriction>
或者可以简化模式,我们将依赖 maxLength:
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]*" />
<xsd:maxLength value="10" />
</xsd:restriction>
问题:
选择其中一个是否存在已知的性能影响?如果两者都提供,任何给定的解析器会先检查 len 并在编译模式之前短路验证吗?或者在任何情况下都将被检查?它是否因解析器而异?
我承认这里的性能差异可能很小。我还希望正则表达式引擎也可以缩短长度约束——但这比我可能关心的更深层次。
抛开性能不谈,我认为我更喜欢将它全部包含在模式中,但这可能反映了我对正则表达式的舒适程度,而不是典型的最佳实践。
谢谢!