1

我不知道这有多可行,但我正在研究 XSD 的数据类型,我想做的一件事是扩展它以允许姓氏中的连字符。所以这应该匹配Smith Fryand Safran-Foer。此外,我想将要检查的字符串的长度限制为不超过 100(或 101)个字符。我的正则表达式原来是:

 <xsd:pattern value="[a-zA-Z ]{0,100}"/>

现在我知道我可以做一些事情来打破它并任意允许两边各有 50 个字符,例如:

 <xsd:pattern value="[a-zA-Z ]{0,50}(\-)?[a-zA-Z ]{0,50}"/>

但这似乎很不礼貌。有没有办法按照以下方式做一些事情:

 <xsd:pattern value="[a-zA-Z (\-)?]{0,100}"/>

询问我要查找的内容的另一种方法是“匹配长度在 0 到 100 之间且其中不超过 1 个连字符的字符串”。

谢谢!

4

1 回答 1

2

这是一个摆动'Match a string of characters between 0 and 100 long with no more than 1 hyphen in it'加上一些额外的限制:

  • 允许空格
  • 不能以连字符开头或结尾

考虑到 XSD 正则表达式支持的语法,我认为您不能在模式中完成最大长度;但是,很容易将它与 maxLength 方面结合起来。

这是一个 XSD:

<?xml version="1.0" encoding="utf-8" ?>
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="last-name">
        <xsd:simpleType>
            <xsd:restriction base="xsd:string">
                <xsd:maxLength value="100"/>
                <xsd:pattern value="[a-zA-Z ]+\-?[a-zA-Z ]+"/>
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>
</xsd:schema>

该模式可以进一步细化以禁止仅由空格包围的连字符等。

有效的 XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<last-name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/XMLSchema.xsd">last - name</last-name>

无效的 XML(连字符太多)和消息:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<last-name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/XMLSchema.xsd">l-ast - name</last-name>

验证错误:

Error occurred while loading [], line 3 position 121 The 'http://tempuri.org/XMLSchema.xsd:last-name' element is invalid - The value 'l-ast - name' is invalid according to its datatype 'String' - The Pattern constraint failed.

无效的 XML(长于最大值,对于我使用 maxLength=14 的测试)和消息:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<last-name xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/XMLSchema.xsd">last - name that is longer</last-name>

验证错误:

Error occurred while loading [], line 3 position 135 The 'http://tempuri.org/XMLSchema.xsd:last-name' element is invalid - The value 'last - name that is longer' is invalid according to its datatype 'String' - The actual length is greater than the MaxLength value.

于 2012-03-28T02:27:17.557 回答