如何针对正则表达式验证属性并仍然允许它为null或为空?

时间:2009-06-30 21:31:20

标签: .net regex validation application-blocks

我正在使用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;}

2 个答案:

答案 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; }