如何使用XSD的minLength和maxLength属性来限制XML Schema中字符串的长度?
- 内容介绍
- 相关推荐
本文共计1038个文字,预计阅读时间需要5分钟。
该功能仅用于字符串值的Unicode编码点数量(即string.length在多数语言中的行为),不是字节数,也不是显示宽度。例如,中文字符、emoji、代理对(如某些可见的emoji)都各自计算为一个长度单位。
常见错误现象:maxLength="10"却校验通过了10个汉字——这其实是预期行为;但若传入"??"(一个ZJW序列),它可能被算作2或4个码点,取决于解析器是否启用Unicode正规化,这时maxLength="1”反而可能不生效。
- 必须配合
whiteSpace使用:默认preserve,开头/结尾空格计入长度;若想忽略,得显式设whiteSpace="collapse" - 只对
xsd:string及其派生类型(如xsd:token、xsd:normalizedString)有效;对xsd:int或xsd:date加minLength会被忽略(XSD处理器通常静默丢弃) - 数值型字段要限制位数?别用
minLength,改用xsd:pattern或应用层校验
为什么minLength="0"有时校验失败?
因为minLength管的是“有值时的最小长度”,不是“是否允许为空”。
本文共计1038个文字,预计阅读时间需要5分钟。
该功能仅用于字符串值的Unicode编码点数量(即string.length在多数语言中的行为),不是字节数,也不是显示宽度。例如,中文字符、emoji、代理对(如某些可见的emoji)都各自计算为一个长度单位。
常见错误现象:maxLength="10"却校验通过了10个汉字——这其实是预期行为;但若传入"??"(一个ZJW序列),它可能被算作2或4个码点,取决于解析器是否启用Unicode正规化,这时maxLength="1”反而可能不生效。
- 必须配合
whiteSpace使用:默认preserve,开头/结尾空格计入长度;若想忽略,得显式设whiteSpace="collapse" - 只对
xsd:string及其派生类型(如xsd:token、xsd:normalizedString)有效;对xsd:int或xsd:date加minLength会被忽略(XSD处理器通常静默丢弃) - 数值型字段要限制位数?别用
minLength,改用xsd:pattern或应用层校验
为什么minLength="0"有时校验失败?
因为minLength管的是“有值时的最小长度”,不是“是否允许为空”。

