Ответы каждого замечательные, но вот один из них, я думаю, немного более полный ...
Это написано для использования javascript одного числа в одной строке:
^(?!.*911.*\d{4})((\+?1[\/ ]?)?(?![\(\. -]?555.*)\( ?[2-9][0-9]{2} ?\) ?|(\+?1[\.\/ -])?[2-9][0-9]{2}[\.\/ -]?)(?!555.?01..)([2-9][0-9]{2})[\.\/ -]?([0-9]{4})$
Если вы хотите совпадать с границами слов, просто измените ^ и $ на \ b
. Я приветствую любые предложения, исправления или критику этого решения. Насколько я могу судить, это соответствует формату NANP (для номеров США - я не проверял другие североамериканские страны при создании этого), избегает любых ошибок 911 (не может быть в коде страны или региональном коде), устраняет только те 555 номеров, которые фактически недействительны (код региона 555, за которым следует 01xx, где x = любое число).
Вы можете сделать это, используя присвоение условного типа XSD 1.1 :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
elementFormDefault="qualified"
vc:minVersion="1.1">
<xs:element name="listOfA">
<xs:complexType>
<xs:sequence>
<xs:element name="a" maxOccurs="unbounded">
<xs:alternative test="@type = 1" type="a1Type"/>
<xs:alternative test="@type = 2" type="a2Type"/>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="a1Type">
<xs:sequence>
<xs:element name="name"/>
<xs:element name="surname"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="a2Type">
<xs:sequence>
<xs:element name="name"/>
<xs:element name="id"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
<typeA/>
, а не<item type="typeA"/>
.) Однако, пожалуйста, задайте новый вопрос, а не расширяйте обсуждения в нескольких направлениях в комментариях. Благодарю. – kjhughes 26 July 2016 в 14:19xs:alternative
, не соответствующего ожидаемой модели контента XSD 1.0 ((annotation?, (simpleType | complexType)?, (unique | key | keyref)*)
). – kjhughes 21 August 2017 в 14:20