Помогите с регулярным выражением - валидация DateTime в XSD - PullRequest
1 голос
/ 29 июня 2011

У меня есть следующее:

<xsd:restriction base="xsd:dateTime">
   <xsd:pattern value="[1-9][0-9]{3}\-.+T[^\.]+(Z|[\+\-].+)"/>
</xsd:restriction>

Я получаю ошибку, когда использую что-то вроде этого: 2011-06-167T09:30:47.0Z или это: 2011-06-16T09:30:47.0Z

Не могли бы вы помочь мне выяснить, что не так с датой и временем, которое я проверяю?


Я не контролирую XSD с помощью RegEx - все, что я могу сделать, это привести мои даты в соответствие с ним.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 29 июня 2011
[1-9][0-9]{3}-.+T[^.]+(Z|[+-].+)

(удалены ненужные экранированные символы), потому что ваша тестовая строка не соответствует правилам регулярного выражения:

[1-9][0-9]{3} # match a four-digit number > 999        : 2011 
-             # dash                                   :     -
.+            # one or more unspecified characters     :      06-167
T             # a T                                    :            T 
[^.]+         # one or more characters except dot      :             09:30:47
(             # followed by either                     :
 Z            # a Z                                    :                     ???
|             # or                                     :
 [+-]         # a plus or minus sign                   :                     ???
 .+           # and one or more unspecified characters :
)

Ваша тестовая строка 2011-06-167T09:30:47.0Z содержит точку перед Z (и нет знака плюс / минус, который позволял бы альтернативе совпадать), поэтому регулярное выражение не выполняется.

Вопрос: каким правилам вы должны следовать?Как в вашем приложении определены даты и время?

0 голосов
/ 29 июня 2011

Вы можете попробовать не жадное сопоставление, возможно, это решит его:

<xsd:pattern value="[1-9][0-9]{3}\-.+?T[^\.]+?(Z|[\+\-].+)"/>

С? после + он ищет наименьшую возможную, а не самую длинную часть.

Далее я не уверен, работает ли это, как вы хотите:

[^\.]

Попробуйте без ^

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