【发布时间】:2017-05-26 13:08:23
【问题描述】:
我的 XSD 中有一个正则表达式模式可以解决问题,但可读性很差。
<xs:element name="short_description">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="|^([a-zA-Z0-9áÁâÂàÀäÄåÅöÖòÒóÓôÔøØüÜûÛùÙúÚßíÍïÏîÎìÌñÑÇç.,?()!\/çéÉêÊèÈëË +;&'':"\n\t%#£°€@=«»¦*`´-]){1,}$"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
因此,为了更好的可读性,我尝试将其分开如下(示例)
<xs:element name="title">
<xs:simpleType>
<xs:restriction base="xs:string">
<!-- Check the title with no limitation to size -->
<xs:pattern value="|^([a-zA-Z0-9áÁâÂàÀäÄåÅöÖòÒóÓôÔøØüÜûÛùÙúÚßíÍïÏîÎìÌñÑÇçéÉêÊèÈëË]){1,}$"/>
<xs:pattern value="|^([.,?()!\/ +;':`´-]){1,}$"/>
<xs:pattern value="|^([&$apos;"]){1,}$"/>
<xs:pattern value="|^([\n\t]){1,}$"/>
<xs:pattern value="|^([%#£°€@=«»¦*]){1,}$"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
重新运行我的 XSD 后,他似乎只在模式分离时查看第一行。
有没有办法让第一个模式(见上文)更具可读性?还是我在第二个例子中做错了什么?
【问题讨论】:
-
您确定您的模式有效吗?第一个应该做什么?
$apos;代表什么?你的意思是&apos;?看起来您需要使用 1 个正则表达式,"[a-zA-Z0-9áÁâÂàÀäÄåÅöÖòÒóÓôÔøØüÜûÛùÙúÚßíÍïÏîÎìÌñÑÇç.,?()!/çéÉêÊèÈëË +;&amp;&apos;:&quot;\n\t%#£°€@=«»¦*`´-]+",因为将其分成不同的部分是不一样的。 -
是的,它们有效,而且确实必须是 '。但也许我们应该忽略它是否有效的问题;)让它更普遍。如果你有这样的正则表达式,你能把它分成多行吗?
-
您不能只将
[^a-z0-9]拆分为[^a-z]|[^0-9]。它破坏了整个功能并匹配任何字符。 -
明白了,没有拆分正则表达式:-)。不过还有一个问题。在您的第一条评论中,您基本上将 '|^([...])$' 更改为 '[...]+'。这是为什么呢?
-
好吧,至少不是字符类,当然也不是 XML 模式类。 XML Schema 正则表达式模式被锚定总是。你不需要
^和$,这些锚是多余的。要匹配包含3的值,您需要编写".*3.*"。不知道|是什么意思 - 值可能为空?最好使用可选组 -"(MY_PATTERN)?"。
标签: regex xml validation xsd