如何在 XSD 中表示 phone 个数字?

How do I represent phone numbers in XSD?

我真的希望它的格式像这样(999) 999-9999,但不知为何它不起作用。

<xsd:simpleType name="TelephoneType">
    <xsd:restriction base="xsd:string">
         <xsd:pattern value="(\d{3}) \d{3}-\d{4}"/>
    </xsd:restriction>
</xsd:simpleType>

我也试过了,但没用:

<xsd:simpleType name="TelephoneType">
    <xsd:restriction base="xsd:string">
         <xsd:pattern value="([0-9]{3}) [0-9]{3}-[0-9]{4}"/>
    </xsd:restriction>
</xsd:simpleType>

具体的正则表达式解决方案

转义您希望在 phone 数字中真正出现的括号:

    <xsd:pattern value="\(\d{3}\) \d{3}-\d{4}"/>

    <xsd:pattern value="\([0-9]{3}\) [0-9]{3}-[0-9]{4}"/>

那么任一模式都将匹配所请求表单的 phone 个数字。

一般设计注意事项

上述解决方案解决了您的具体问题,但是请记住,在美国和国际上,phone 数字通常以 (999) 999-9999 以外的许多其他方式书写。 Stack Overflow 上的这个问题解决了这个主题:A comprehensive regex for phone number validation

更健壮的设计将 select 一种通用的、规范化的存储和交换格式,如 XSD 中所声明的那样。此数据的提供者将负责从可接受的约定转换为规范化形式。在传输或存储之前可以接受松散或部分验证的情况下,单独跟踪所提供形式的数据也很有用,即使它不能自动转换为规范化形式。