2

Microsoft の Validation Application Block を使用しています。電話番号を保持する文字列プロパティがあります。私は 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

これはただの予感です (そして、Validation Application Block にアクセスできないため、現時点ではテストできません)、(?:最初と)?最後に次のようにラップすることで、正規表現全体をオプションにすることができます。

[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 に答える