如何在XSD模式中定义不同长度的字符串?

时间:2010-04-15 08:41:30

标签: xsd

必须对模式进行验证输入XML标记,如下所示:

type : positive int / decimal
minimum length is 0
max length is 12(before decimal point)
fraction digits are optional if exist then precision must be 2.

这意味着允许正整数和十进制数(2位精度)。

所以可接受的值可以是:

  • 0
  • 0.00
  • 1234567890
  • 123456789012
  • 123456789012.12

无效值为:

  • 0.000
  • 1234567890123(13位数 - 无效)

我设计的模式是:

<xs:pattern value="|([0-9]){12}|([0-9]){12}[.][0-9][0-9]"/>

这种模式的问题是,它不允许字符串长度小于12的数字,它说“1234567890”是一个无效值,必须允许它!

2 个答案:

答案 0 :(得分:3)

正则表达式模式\d{0,12}(\.\d{2})?应该可以解决问题。

对模式的简短解释:

\d[0-9]的简写。 \d{0,12}表示\d应出现0到12次。这是贪婪的,所以它会尝试尽可能多地匹配,最多12个。

\.\d{2}表示一个点后跟两位数。

?表示上一个项目可以发生0或1次。 (\.\d{2})周围的括号是必要的,因为没有它们?将仅适用于\d{2}

答案 1 :(得分:1)

但上述内容将允许:

.00作为有效输入。也许类似于:(|\d{1,12}(\.\d{2})?)允许null或至少一个数字会更好。