【问题标题】:Validating a decimal 3.4 in the XSD schema ^[0-9]{1,3}(?:\.[0-9]{1,4})?$验证 XSD 架构中的小数 3.4 ^[0-9]{1,3}(?:\.[0-9]{1,4})?$
【发布时间】:2015-01-21 13:11:14
【问题描述】:

我需要安装 XSD 来验证十进制数 3.4。整段最多可以有3个字符,小数部分不是强制性的,但如果有的话,最多需要4个字符。

正则表达式 ^[0-9]{1,3}(?:.[0-9]{1,4})?$ 在测试站点中有效,但是当我放入 XSD 时出现错误:“InvalidRegex:模式值 '^[0-9]{1,3}(?:.[0-9]{1,4})?$' 不是有效的正则表达式。报告的错误是:'这当前选项设置不支持表达式。在“{2}”列。”

XSD 架构:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="st_decimal7-4">
	 <xs:restriction base="xs:decimal">
		<xs:pattern value="^[0-9]{1,3}(?:\.[0-9]{1,4})?$"/>	     
	 </xs:restriction>
  </xs:simpleType>

  <xs:element name="teste">
	 <xs:complexType>
		<xs:sequence>
		  <xs:element name="valor" type="st_decimal7-4" />
		</xs:sequence>
	  </xs:complexType>
  </xs:element>
</xs:schema>
				 

【问题讨论】:

    标签: regex xml validation xsd


    【解决方案1】:

    您正在使用 XSD 定义的正则表达式语法中不可用的几种构造。 (众所周知,某些模式处理器,例如 Microsoft,会忽略此语法,而只使用它们内部使用的正则表达式库中的任何有效内容)。

    不允许的结构包括 ^ 和 $(不需要,因为正则表达式是隐式锚定的)和“(?”

    【讨论】:

      【解决方案2】:

      那里不能有非捕获组和开始/结束标志。只需将带有模式的行更改为此即可:

      <xs:pattern value="[0-9]{1,3}(\.[0-9]{1,4})?"/>
      

      【讨论】:

      • 您可能还想在正则表达式的开头添加-? 以支持负数。
      猜你喜欢
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      相关资源
      最近更新 更多