2009-06-30 12 views
2

J'utilise le bloc d'application de validation de Microsoft. J'ai une propriété de chaîne qui contient un numéro de téléphone. J'ai un RegexValidator sur lui qui fonctionne plutôt bien pour s'assurer que seules les chaînes de type numéro de téléphone sont dans la propriété, mais la propriété devrait également autoriser les valeurs null ou une chaîne vide.Comment puis-je valider une propriété par rapport à une expression régulière tout en lui permettant d'être vide ou vide?

Actuellement, ce validateur échouera lorsque la valeur est nulle ou vide.

Comment puis-je contourner le problème?

(Je sais que ce regex est un peu difficile à lire dans ce format donc je fourni un lien pour le tester à.)

// 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;} 

Répondre

2

Vous pourriez essayer d'ajouter ceci au début de l'expression:

^$| 

Il doit correspondre à la chaîne vide ou à toute regex qui suit le |

+0

merci, a parfaitement fonctionné –

0

Ceci est juste une intuition (et je ne peux pas tester pour le moment parce que je n'ai pas accès au bloc d'application de validation), mais vous pouvez essayer de rendre l'ensemble de la regex optionnelle en l'entourant de (?: au début et )? à la fin:

[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; }