XSD 逗号分隔值的正则表达式模式
XSD regex pattern for comma separated values
我已经为字符串参数定义了一个 XSD,它接受 5 个参数,这些参数可以用字母数字逗号分隔的名称(如 a1、ABC1、jack2 或 a1、b1、c、d1、e)。但是当我给出像 "a1,AB1" 这样的字符串时,这会产生问题,而 a1,a2 工作正常。模式值有什么问题?
<xs:attribute name="paramList" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-zA-Z0-9])*(,[a-z0-9])*(,([a-z0-9])*(,[a-z0-9])*(,[a-z0-9])*)"/>
</xs:restriction>
</xs:simpleType>
issue when i give a string like "a1,AB1" whereas a1,a2 works fine. What is the wrong with the pattern value?
在您的模式中,您正确地考虑了第一个值的大小写字母:
([a-zA-Z0-9])*
但是,以下值只允许使用小写字母:
(,[a-z0-9])*
因此,要解决您的主要问题,请在其他括号中添加 A-Z
:
(,[a-zA-Z0-9])*
与您的描述相比,您的模式还有一个问题。你说有
5 parameters that can have alphanumberic comma seperated names
如果我理解正确的话,您因此想要允许一个包含(最多)五个值的 comma-separated 列表。
但是,您在捕获组中包含了逗号,并用星号标记了整个捕获组,这意味着它可能会出现从零到无限次。像这样,单个模式片段
(,[a-z0-9])*
将匹配 任意数量 的 comma-separated 值,而不仅仅是一个。但是,这些值中的每一个都只能包含 一个 字母数字字符。我想你想写
(,[a-z0-9]*)
改为强制执行 一个 逗号和任意数量的字母数字字符。
我建议将此模式用于 1 到 5 个 comma-separated 参数名称:
<xs:pattern value="[a-zA-Z][a-zA-Z0-9]*(\s*,\s*[a-zA-Z][a-zA-Z0-9]*){0,4}"/>
备注:
- 参数名称通常必须以字母开头,而不是数字。
- Space 通常 可能 存在于逗号之前或之后。
{0,4}
出现说明符优于扩展重复。
- 参数名称有时允许
_
;如果需要,添加到 [a-zA-Z0-9]
(两个位置)。
我已经为字符串参数定义了一个 XSD,它接受 5 个参数,这些参数可以用字母数字逗号分隔的名称(如 a1、ABC1、jack2 或 a1、b1、c、d1、e)。但是当我给出像 "a1,AB1" 这样的字符串时,这会产生问题,而 a1,a2 工作正常。模式值有什么问题?
<xs:attribute name="paramList" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-zA-Z0-9])*(,[a-z0-9])*(,([a-z0-9])*(,[a-z0-9])*(,[a-z0-9])*)"/>
</xs:restriction>
</xs:simpleType>
issue when i give a string like "a1,AB1" whereas a1,a2 works fine. What is the wrong with the pattern value?
在您的模式中,您正确地考虑了第一个值的大小写字母:
([a-zA-Z0-9])*
但是,以下值只允许使用小写字母:
(,[a-z0-9])*
因此,要解决您的主要问题,请在其他括号中添加 A-Z
:
(,[a-zA-Z0-9])*
与您的描述相比,您的模式还有一个问题。你说有
5 parameters that can have alphanumberic comma seperated names
如果我理解正确的话,您因此想要允许一个包含(最多)五个值的 comma-separated 列表。
但是,您在捕获组中包含了逗号,并用星号标记了整个捕获组,这意味着它可能会出现从零到无限次。像这样,单个模式片段
(,[a-z0-9])*
将匹配 任意数量 的 comma-separated 值,而不仅仅是一个。但是,这些值中的每一个都只能包含 一个 字母数字字符。我想你想写
(,[a-z0-9]*)
改为强制执行 一个 逗号和任意数量的字母数字字符。
我建议将此模式用于 1 到 5 个 comma-separated 参数名称:
<xs:pattern value="[a-zA-Z][a-zA-Z0-9]*(\s*,\s*[a-zA-Z][a-zA-Z0-9]*){0,4}"/>
备注:
- 参数名称通常必须以字母开头,而不是数字。
- Space 通常 可能 存在于逗号之前或之后。
{0,4}
出现说明符优于扩展重复。- 参数名称有时允许
_
;如果需要,添加到[a-zA-Z0-9]
(两个位置)。