我正在使用Microsoft的验证应用程序块。我有一个字符串属性,其中包含一个电话号码。我有一个RegexValidator,它可以很好地确保只有属性中的电话号码类型字符串,但该属性还应该允许值为null或空字符串。
目前,当值为null或为空时,此验证器将失败。
我怎样才能解决这个问题?
(我知道这个正则表达式有点难以用这种格式阅读,所以我提供了一个链接来测试它。)
// the regex below can be found and tested at: http://regexlib.com/RETester.aspx?regexp_id=536
[RegexValidator(@"^(?:(?<1>[(])?(?<AreaCode>[2-9]\d{2})(?(1)[)])(?(1)(?<2>[ ])|(?:(?<3>[-])|(?<4>[ ])))?)?(?<Prefix>[1-9]\d{2})(?(AreaCode)(?:(?(1)(?(2)[- ]|[-]?))|(?(3)[-])|(?(4)[- ]))|[- ]?)(?<Suffix>\d{4})$", MessageTemplateResourceName = "InvalidPhoneNumberMessage", MessageTemplateResourceType = typeof(Xltech.Common.Resources.XLStrings))]
public string NotificationCellNumber {get; set;}
答案 0 :(得分:2)
您可以尝试将其添加到表达式的开头:
^$|
它应匹配空字符串或|后面的任何正则表达式...
答案 1 :(得分:0)
这只是一种预感(目前我无法测试,因为我无法访问验证应用程序块),但您可以尝试通过使用(?:
包装它来使整个正则表达式可选在开始时和)?
在最后:
[RegexValidator(@"^(?:(?:(?<1>[(])?(?<AreaCode>[2-9]\d{2})(?(1)[)])(?(1)(?<2>[ ])|(?:(?<3>[-])|(?<4>[ ])))?)?(?<Prefix>[1-9]\d{2})(?(AreaCode)(?:(?(1)(?(2)[- ]|[-]?))|(?(3)[-])|(?(4)[- ]))|[- ]?)(?<Suffix>\d{4}))?$", MessageTemplateResourceName = "InvalidPhoneNumberMessage", MessageTemplateResourceType = typeof(Xltech.Common.Resources.XLStrings))]
public string NotificationCellNumber { get; set; }