Как определить переменную длину строки в шаблоне XSD? - PullRequest
2 голосов
/ 15 апреля 2010

Входной тег 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 цифр).

поэтому допустимые значения могут быть такими:

  • 1009 * нуль *
  • 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 ]

3 голосов
/ 15 апреля 2010

Шаблон регулярного выражения \d{0,12}(\.\d{2})? должен помочь.

Краткое объяснение схемы:

\d - сокращение от [0-9]. \d{0,12} указывает, что \d должно происходить от 0 до 12 раз. Он жадный, поэтому попытается найти как можно больше, до 12.

\.\d{2} представляет точку, за которой следуют ровно две цифры.

? указывает, что предыдущий элемент может появляться 0 или 1 раз. Скобки вокруг (\.\d{2}) необходимы, потому что без них ? будет применяться только к \d{2}

1 голос
/ 17 апреля 2010

Но вышесказанное позволит:

.00 как действительный ввод. Возможно, что-то вроде: (|\d{1,12}(\.\d{2})?) для разрешения нуля или хотя бы одной цифры было бы лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...