我为字符串参数定义了一个XSD,它接受5个参数,这些参数可以包含字母数字逗号分隔的名称(如a1,ABC1,jack2或a1,b1,c,d1,e)。但是当我给出类似" a1,AB1和#34;的字符串时,这会产生问题。而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>
答案 0 :(得分:1)
当我给出类似&#34; a1,AB1&#34;的字符串时出现问题而a1,a2工作正常。模式值有什么问题?
在您的模式中,您正确考虑第一个值的大写和小写字母:
([a-zA-Z0-9])*
但是,您只允许使用小写字母表示以下值:
(,[a-z0-9])*
因此,要解决您的主要问题,请将A-Z
添加到其他括号中:
(,[a-zA-Z0-9])*
与您的描述相比,您的模式还有另一个问题。你说有
5个可以包含字母数字逗号分隔名称的参数
如果我理解正确,您希望允许以逗号分隔的(最多)五个值列表。
但是,您在捕获组中包含逗号,并用星号标记整个捕获组,这意味着它可能从零到无限次出现。像这样,单个模式片段
(,[a-z0-9])*
将匹配任意数量的逗号分隔值,而不只是一个。但是,这些值中的每一个都只能由一个字母数字字符组成。我想你想写
(,[a-z0-9]*)
强制执行一个逗号和任意数量的字母数字字符。
答案 1 :(得分:1)
我建议这种模式用于1到5个以逗号分隔的参数名称:
<xs:pattern value="[a-zA-Z][a-zA-Z0-9]*(\s*,\s*[a-zA-Z][a-zA-Z0-9]*){0,4}"/>
注意:
{0,4}
出现说明符胜过扩展重复。_
;如果需要,可以添加到[a-zA-Z0-9]
(两个地方)。