2015-06-16 3 views
2

В XML, у меня есть тег сказать <membercode>Xml схема регулярное выражение, чтобы не допускать пробелов в одиночку

Узор регулярное выражение для поля в настоящее время является <xs:pattern value="[a-zA-Z0-9\s]{1,3}" />

membercode должны принимать следующие значения:

1) "XY" -> pass 

2) "XY " -> pass 

3) " " -> i need to have this failed. but it is getting passed. 

4) " XY " -> need to be failed 

EDIT: Требования:

1) общее допустимые символы должны быть максимально 3.

2) В разрешенных 3 символах могут быть пробелы. ex: "XY", "XY "," XY" , "X "

3) Но если общие символы превышают 3 или существуют только пробелы (нет буквенно-цифровых символов), то это не должно допускаться.

Пробужденное свойство сглаживания пробелов, но в этом случае maxlength применяется после завершения краха. , поэтому допустимы значения больше максимальной длины.

поэтому пытался ниже вещи ..

<xs:pattern value="[a-zA-Z0-9]{1,3}[\s?]" /> 
<xs:pattern value="[a-zA-Z0-9]{1,3}|[a-zA-Z0-9\s?]{1,3}" /> 

, но не могли получить держаться правильного решения.

Пожалуйста, укажите мне правильный подход для этого ..

Большое спасибо за предложения!

+1

Я думаю, было бы лучше, если бы вы сказали нам требования (для этого нужно от одного до трех букв, чтобы быть в порядке, у него могут быть дополнительные пробелы в конце и т. Д.), А не только примеры. – sergioFC

+0

отредактировал вопрос с требованиями. – Vignesh

ответ

3

Вы находитесь на правильном пути, используя <xs:whiteSpace> ограничение, но это значение должно быть для того, чтобы не изменять исходный пробельные preserve.

Вы можете использовать этот шаблон :

[\w\d ]*[\w\d][\w\d ]* 

Центральная часть ([\w\d]) говорит, что буква или цифра должна появиться. До и после этого обязательного буквенно-цифрового символа строка может необязательно иметь комбинацию букв/цифр/пробелов ([\w\d ]*). Ограничения <xs:whiteSpace> и <xs:maxLength> гарантируют, что имеется не более трех строк длины, включая исходные белые пробелы.

<xs:element name="elem"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:whiteSpace value="preserve"/> 
      <xs:maxLength value="3"/> 
      <xs:pattern value="[\w\d ]*[\w\d][\w\d ]*"></xs:pattern> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

Обратите внимание, что вы можете изменить \w к a-zA-Z, если вы не хотите, символ подчеркивания, который также включен в \w.

2

Это должно работать:

[a-zA-Z0-9][a-zA-Z0-9\s]{1,2} 

[\w\d][\w\d\s]{1,2} equivalent 

ли это помочь вам?

\s?[\w\d]{1,3}\s? 
+1

«Y» (с 2 пробелами) не передается. –

+1

Возможно, обновите свой вопрос с этой целью ;-) – pjanssen

+1

'\ s? [\ W \ d] {1,3} \ s?' Works..but failed for case "XY"; так как в этом случае общее количество символов составляет 4. – Vignesh

Смежные вопросы