正则表达式的数字列表

时间:2015-12-04 07:15:54

标签: regex xml xsd

我试图通过在xsd中给出限制来验证xml架构。架构有 555-333-4834,444-233-3333,可能包含一个或多个电话号码。

这是我的解决方案:

<xs:element name="PhoneNumber" minOccurs="1" maxOccurs="unbounded">
       <xs:simpleType>
           <xs:restriction base="xs:string">
               <xs:maxLength value="14"></xs:maxLength>
               <xs:minLength value="10"></xs:minLength>
               <xs:pattern value="^[0-9]{3}(-[0-9]{3})(-[0-9]{4})?"></xs:pattern>
           </xs:restriction>
       </xs:simpleType>
   </xs:element>

目标是检查前3个是否为数字。我试着用这个测试。它适用于1个数字,但不适用于数字列表。

3 个答案:

答案 0 :(得分:1)

假设所有电话号码必须完全采用您发布的格式(nnn-nnn-nnnn),此正则表达式将匹配一个或多个,以逗号分隔(不允许使用前导/尾随逗号):

^\d{3}-\d{3}-\d{4}(,\d{3}-\d{3}-\d{4})*$

如果允许使用前导/尾随逗号,则模式为:

^,?\d{3}-\d{3}-\d{4}(,\d{3}-\d{3}-\d{4})*,?$

答案 1 :(得分:0)

这个人做的工作:
^([0-9]{3}-[0-9]{3}-[0-9]{4})(,[0-9]{3}-[0-9]{3}-[0-9]{4})*$

适用于一个或多个以逗号分隔的电话号码。

答案 2 :(得分:0)

限制maxLength = 14避免存在多个电话号码。此外,你必须修改模式为@aaron_world_traveler和@Paco Abato在他的答案中建议。

顺便说一句,使用您当前的架构,您可以使用多个PhoneNumber标签,每个标签都有一个数字。