Ограничить строки в XSD, чтобы они не имели начальных или конечных пробелов и содержали только буквенно-цифровые символы, дефис и знак подчеркивания? - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь устранить начальные / конечные пробелы, а также хочу убедиться, что моя строка не содержит специальных символов (кроме «-» и «_», они мне нужны). Из другого поста я смог придумать это

<xs:simpleType name="RandomString"> 
    <xs:restriction base="xs:string">
      <xs:pattern value="\S([a-zA-Z0-9_-]*\S)?"/> 
    </xs:restriction>
 </xs:simpleType>

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

Т.е. строки вроде abcdef1234!@# и abc123!xyz не разрешены согласно регулярному выражению, но что-то вроде abc123! или random234@ (только один специальный символ заканчивается строкой) не перехватывается моим регулярным выражением. Я что-то упустил?

1 Ответ

0 голосов
/ 27 января 2019

Ваше регулярное выражение соответствует нежелательным строкам, потому что \S соответствует любому непробельному символу.

Ваш [a-zA-Z0-9_-] класс символов не соответствует пробелу, поэтому вы можете вообще пропустить шаблон \S и использовать

<xs:pattern value="[a-zA-Z0-9_-]+"/>

См. Демонстрационную версию regex .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...