2

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

2 回答 2

2

您可以尝试将其添加到表达式的开头:

^$|

它应该匹配空字符串或任何跟在 | 后面的正则表达式。...

于 2009-06-30T21:55:06.667 回答
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; }
于 2009-06-30T21:59:16.177 回答