我正在尝试使用正则表达式和xsd:pattern设置限制,以仅允许属于特定范围的ASCII值且最多包含10个字符的字符。特别是从ASCII值33到126。
截至目前,我有以下代码片段,我正在尝试修改。
<xsd:simpleType name="Name">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[(\p{L}|\d)._-]{0,9}"/>
</xsd:restriction>
</xsd:simpleType>
我的另一个选项是在正则表达式中列出33到126之间的各个ASCII字符。截至目前,我拒绝走这条路。
答案 0 :(得分:2)
使用类似[!-~]{0,10}
的范围应该可以解决问题。
答案 1 :(得分:2)
为避免列出所有选项,您可以使用范围(如Ismail Ghalimi已建议的那样):
<xsd:pattern value="[!-~]{0,10}"/>
或者,由于您列出的范围基本上是ASCII中的整个非空白字符集,因此您可以使用Unicode块名称Basic Latin和简单的字符类减法。您可以将长度约束移动到单独的方面:
<xsd:maxLength value="10"/>
<xsd:pattern value="[\p{IsBasicLatin}-[\s]]*"/>
请注意,在XSD中,正则表达式是在没有锚点的情况下编写的,所以在开头不需要^而在结尾没有$:模式匹配整个文字,或者文字不是类型有效的。