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](两个位置)。