2009-06-30 5 views
2

私はMicrosoftの検証アプリケーションブロックを使用しています。私は電話番号を保持する文字列プロパティを持っています。私はRegexValidatorを持っています。これは、電話番号型の文字列がプロパティ内にあることを保証するためにはうまくいきますが、プロパティは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

ありがとうございます –

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; } 
関連する問題