2010-09-04 6 views
2

Je travaille sur asp.net et je veux prendre DOB de l'utilisateur dans une zone de texte, comment puis-je valider la boîte de test pour feb et année bissextile considération.Je veux aussi que la date soit entrée dans DD/MM/AAAADate de naissance validation

Répondre

1

Essayez ceci -

// <summary> 
// Determine if Date String is an actual date 
// Date format = MM/DD/YYYY 
// </summary> 
// <param name="date"></param> 
// <returns></returns> 
private bool ValidateDate(string date) 
{ 
    try 
    { 
     // for US, alter to suit if splitting on hyphen, comma, etc. 
     string[] dateParts = date.Split('/'); 

     // create new date from the parts; if this does not fail 
     // the method will return true and the date is valid 
     DateTime testDate = new 
      DateTime(Convert.ToInt32(dateParts[2]), 
      Convert.ToInt32(dateParts[0]), 
      Convert.ToInt32(dateParts[1])); 

     return true; 
    } 
    catch 
    { 
     // if a test date cannot be created, the 
     // method will return false 
     return false; 
    } 
} 
+0

Il semble inélégant de lancer une exception quand il existe des méthodes pour tester les chaînes de date. – RedFilter

1

Essayez d'utiliser validateur d'expression régulière dans ASP.NET .. Quelque chose comme ceci:

<asp:RegularExpressionValidator ID="RegExpVal1" runat="server" ControlToValidate="{Here Goes your Text Box}" ErrorMessage="DOB has to be in dd/mm/yyyy format" ValidationExpression="^([1-9]0[1-9][12][0-9]3[01])[- /.]([1-9]0[1-9]1[012])[- /.][0-9]{4}$" >*</asp:RegularExpressionValidator> 

EDIT: Je missunderstood votre question (TNX à @rob). Alors peut-être que vous pouvez utiliser le validateur personnalisé. Quelque chose comme ceci:

<asp:CustomValidator ID="MyValidator" runat="server" 
    ErrorMessage="Invalid date!" 
    ControlToValidate="tbDOB" 
    OnServerValidate="MyValidator_ServerValidate"> 
</asp:CustomValidator> 

Ajoutez ci-dessus à votre contrôle d'utilisateur DateTime. Et maintenant, pour vérifier la date de validité:

public partial class DateTime_EditField : System.Web.DynamicData.FieldTemplateUserControl 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void MyValidator_ServerValidate(object source, ServerValidateEventArgs args) 
    { 
     DateTime temp; 
     String textDate = tbDOB.Text; 

     if (DateTime.TryParse(textDate, out temp)) 
     { 
      args.IsValid = true; 
     } 
     else 
     { 
      args.IsValid = false; 
     } 
    } 
} 
+1

-1, Désolé, cela ne gère pas 'valider la boîte de test pour feb et l'année bissextile 'comme l'OP demandé. – Rob

+1

@Rob: assez juste ... – rjovic

1

Vous pouvez utiliser DateTime.TryParseExact:

string dateString = "22/07/1876"; 
DateTime dateOut; 
if ((DateTime.TryParseExact(dateString, "dd/MM/yyyy", 
        new CultureInfo("en-US"), 
        DateTimeStyles.None, 
        out dateOut))) 
    Console.WriteLine("Date is valid: {0}", dateOut.ToString()); 
else 
    Console.WriteLine("Date string {0} is invalid.", dateString); 
1

La meilleure chose à faire est d'utiliser la méthode DateTime.ParseDate:

var date = "01/10/1981"; 

var parsedDate = new DateTime(); 
if (DateTime.TryParse(date, out parsedDate)) 
{ 
    // Date is valid and is now in "date" 
} 
else 
{ 
    // Date is NOT valid/parseable 
} 
2

Ces vali Le code de dation fonctionne également.

<asp:CompareValidator ErrorMessage="(mm/dd/yyyy)" Display="Dynamic" ID="valcDate" ControlToValidate="txtDate" Operator="DataTypeCheck" Type="Date" runat="server"></asp:CompareValidator>   

<asp:RangeValidator ID="valrDate" runat="server" ControlToValidate="txtDate" MinimumValue="12/31/1950" MaximumValue="1/1/2100" Type="Date" text="Invalid Date" Display="Dynamic"/> 
1

Je ne comprends pas pourquoi vous tous essayer de réinventer la roue, utiliser une expression régulière pour valider avec le format que vous voulez que la date soit dans http://regexlib.com/Search.aspx?k=date&c=-1&m=5&ps=50 a attribuer une grande regex qui prend des années bissextiles et bientôt.