我正在尝试使用RegularExpression
属性中的条件来验证属性的特定格式集,但似乎只要我在模式中包含它(条件)就会通过验证。
我甚至尝试过最简单的例子,以及微软的例子(例如:@"\b(?(\d{2}-)\d{2}-\d{7}|\d{3}-\d{2}-\d{4})\b"
,但似乎没有任何效果(允许所有值)。
为清晰起见添加: 我需要验证税务登记号码。规则是:
if it starts with country identifier for country CC do strict format check for all other countries allow any string else assume it's local number and do strict format check
(大部分时间注册都是本地的,规则是已知的,但应该可以输入格式未知的外国号码。)
虽然我很感激上面允许的正则表达式,但我的问题不是关于特定模式本身,而是为什么使用条件 - 在这种特殊情况下(asp.net/c#属性) - 在模式中脱离验证以及如何解决它。
答案 0 :(得分:0)
condititional语句的语法是(?(?=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
答案 1 :(得分:0)
我错过了显而易见的事实(感谢Robin指出我实施)
这是发生了什么:)
我检查.net
是否支持条件(确实如此)
我将一个条件放入Regex
属性,并且很高兴解析和编译。
然后,我尝试通过触发Web表单并输入乱码来检查它是否有效。当输入失去焦点时,它应该产生关于格式错误的警告信息。它没。
我忘记了这个'瞬间'客户端验证(mvc unobtrusive validation)实际上是通过由mvc模板引擎生成和嵌入的jquery / javascript代码完成的。
这意味着它实际上是与这些模式匹配的javascript。不幸的是,javascript 不支持条件所以只要它看到一个 meh