XML Schema与.NET正则表达式行为不一致修正求助
兼容XML Schema与.NET的正则表达式改写方案
规则要求
必须严格遵守以下验证规则:
- 仅允许使用字符:a-z、A-Z、0-9、/、-、?、:、(、)、.、,、‘、+、单个空格
- 禁止项:
- 字符串首尾出现空格或斜杠
/ - 字符串内出现连续空格(如
) - 字符串内出现双斜杠
// - 字符串内包含任何
&符号 - 上述允许字符之外的其他字符
- 字符串首尾出现空格或斜杠
问题说明
原正则表达式在XML Schema验证中会禁止文本中的&,但.NET环境下允许,且未严格限制连续空格、双斜杠等规则。直接拼接^[^&]*$未成功,因未结合原有字符范围与格式限制,导致规则冲突。
最终正则表达式
XML Schema 环境(需适配XML特殊字符转义)
^[a-zA-Z0-9\-?:().,‘+]+(?:(?: [a-zA-Z0-9\-?:().,‘+\/]+)|(?:\/[a-zA-Z0-9\-?:().,‘+]+))*$
.NET 环境(直接使用)
^[a-zA-Z0-9\-?:().,‘+]+(?:(?: [a-zA-Z0-9\-?:().,‘+\/]+)|(?:\/[a-zA-Z0-9\-?:().,‘+]+))*$
正则解释
^[a-zA-Z0-9\-?:().,‘+]+:匹配字符串开头,必须是1个及以上非空格、非/的允许字符,确保首尾合规(?: ... )*:非捕获组,可重复零次或多次,包含两种合法分支:(?: [a-zA-Z0-9\-?:().,‘+\/]+):单个空格后接允许字符(可含/),避免连续空格(?:\/[a-zA-Z0-9\-?:().,‘+]+):单个/后接非/、非空格的允许字符,避免双斜杠
$:匹配字符串结尾,确保结尾为非空格、非/的合法字符
验证示例
无效案例(两种环境均不通过)
Dlhy & testovaci nazov Dlhy&Testovaci nazov Dlhy &Testovaci nazov Dlhy& Testovaci nazov Dlhy Testovaci nazov
无效原因:前4个包含
&符号,最后1个包含连续空格
有效案例(两种环境均通过)
Dlhy a: 'Testovaci, (nazov.) /? +
符合所有规则:无
&、无连续空格、无双斜杠、首尾合规、仅使用允许字符
内容的提问来源于stack exchange,提问作者zdenok
相关产品推荐
相关产品推荐

