使用正则表达式属性验证属性,条件总是通过
本文关键字:属性 条件 正则表达式 验证 | 更新日期: 2023-09-27 17:50:45
我试图在RegularExpression
属性中使用条件来验证属性的特定格式集,但似乎只要我在模式中包含它(条件),任何东西都可以通过验证。
我甚至尝试了最简单的,也从微软的例子(像这个:@"'b(?('d{2}-)'d{2}-'d{7}|'d{3}-'d{2}-'d{4})'b"
,但似乎没有工作(所有的值都是允许的)。
为清晰添加:我需要验证税务登记号码。规则如下:
如果以国家标识符开头国家CC做严格的格式检查对于所有其他国家允许任何字符串其他的假设是本地号码,并进行严格的格式检查之前(大多数情况下注册将是本地的,规则是已知的,但应该可以输入格式未知的外国号码)
虽然我当然会感谢上面的正则表达式允许,但我的问题不是关于特定的模式本身,而是为什么在这个特定的场景(asp.net/c#属性)中使用条件-在模式中跳过验证以及如何解决它。
条件语句的语法是(?(?=condition)iftrue|else)
,所以你的正则表达式应该是
'b(?(?='d{2}-)'d{2}-'d{7}|'d{3}-'d{2}-'d{4})'b
但是在我看来,在这个例子中你似乎不需要条件,记住(?=...)
是零宽度(这里的条件是互斥的)。这应该足够了:
'b(?:'d{2}-'d{7}|'d{3}-'d{2}-'d{4})'b
我错过了明显的(感谢Robin为我指出实现)
事情是这样的:)
我检查了.net
是否支持条件(它确实)
我把一个条件放入Regex
属性,它被愉快地解析和编译。
然后我试图检查它是否通过触发web表单和输入胡言乱语工作。当输入失去焦点时,它应该产生关于不正确格式的警告消息。但事实并非如此。
我忘记的是,这个"即时"客户端验证(mvc不显眼的验证)实际上是通过jquery/javascript代码生成和嵌入mvc模板引擎完成的。
这意味着它实际上是javascript匹配这些模式。不幸的是,javascript 不支持条件语句,所以只要看到条件语句,它就会转到meh