2009-08-03 7 views
1

J'ai 3 champs de zone de texte. pour représenter une datevalider 3 champs de texte représentant la date de naissance

par exemple JJ MM AAAA

Comment puis-je valider que les données correctes est entré dans chaque zone de texte. est-ce une regexpression ??

que je dois faire ceci à l'intérieur du fichier ascx/ASPX plutôt que les .cs CodeBehind

grâce

+0

Y a-t-il une raison pour laquelle vous ne pouvez pas entrer la date dans une zone de texte? Cela rendrait votre validation beaucoup plus facile. – cptScarlet

+0

les conceptions sont venus avec trois zones de texte :( – raklos

Répondre

5

Vous pouvez valider chaque champ avec des expressions régulières, mais cela ne prendrait pas en compte des mois différents avec des nombres de jours différents: vous pourriez entrer des dates non valides.

Du côté du serveur, il pourrait être validé avec quelque chose comme ceci:

DateTime D; 
string CombinedDate=String.Format("{0}-{1}-{2}", YearField.Text, MonthField.Text, DayField.Text); 
if(DateTime.TryParseExact(CombinedDate, "yyyy-M-d", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None, out D)) { 
    // valid 
} else { 
    // not valid 
} 
+0

Je dois le faire dans le ascx/aspx ... – raklos

+0

Vous pouvez le faire là - ne pas utiliser un fichier codebehind – Skrim

0

Vous devez utiliser CustomValidator pour valider votre entrée de résultat de tous les 3 contrôles. Peut-être que dans ce script de validation personnalisé, vous pouvez utiliser regex pour valider les données.

0

Essayez de les mettre dans un à des objets DateTime.

int day, month, year; 

if (Int32.TryParse(dayInput.Value, out day)) { 
    if (Int32.TryParse(monthInput.Value, out month)) { 
     if (Int32.TryParse(yearInput.Value, out year)) { 
      DateTime birthDate = new DateTime(year, month, day); 

      if ([birthDate is in valid range]) 
       // it passes 
     } 
    } 
} 

Je sais que ce n'est pas très élégant, mais vous pouvez également tester la même manière en utilisant les éléments suivants RegEx

[0-9]+ 

Cependant, j'aime mon chemin parce que je peux entrer dans un DateTime sur le terrain, puis testez la gamme pour vous assurer qu'elle ne dépasse pas la date du jour et qu'elle n'est pas inférieure à 100 ans avant la date actuelle.

+0

Que faire si dayInput était 12039, monthInput était -1- – ThePower

0

La validation dans le fichier aspx ne présenterait-elle pas de code logique dans la couche de présentation?

Je suggère un contrôle AJAX (il existe une boîte AJAX MaskEdit - similaire). Ils conviennent généralement pour ce genre de choses, regardez dans la boîte à outils AJAX, si le serveur que vous déployez peut les supporter.

0

Exemple complet:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="Web_Layer.WebForm2" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
    <script runat="server"> 
     protected void ValidateDate(object sender, EventArgs e) 
     { 
      int day=0; 
      int month=0; 
      int year=0; 

      if (!int.TryParse(txtDD.Text, out day)) 
       day = 0; 
      if (!int.TryParse(txtMM.Text, out month)) 
       month = 0; 
      if (!int.TryParse(txtYY.Text, out year)) 
       year = 0; 

      if (((year > 0)) && ((month > 0) && (month < 13)) && ((day > 0) && (day <= DateTime.DaysInMonth(year, month)))) 
      { 
       lblValid.Text = "Valid!"; 
      } 
      else 
      { 
       lblValid.Text = "NOT Valid!"; 
      } 
     } 
    </script> 
    <asp:TextBox ID="txtDD" runat="server"></asp:TextBox> 
    <asp:TextBox ID="txtMM" runat="server"></asp:TextBox> 
    <asp:TextBox ID="txtYY" runat="server"></asp:TextBox> 
    <asp:Button ID="btn" runat="server" OnClick="ValidateDate"/> 
    <asp:Label ID="lblValid" runat="server"></asp:Label> 
    </div> 
    </form> 
</body> 
</html> 
0

Qu'en est-il en utilisant à la place dropdowns?

0
public bool isValidDate(string datePart, string monthPart, string yearPart) 
{ 
    DateTime date; 
    string strDate = string.Format("{0}-{1}-{2}", datePart, monthPart, yearPart); 
    if (DateTime.TryParseExact(strDate, "dd-MM-yyyy", System.Globalization.DateTimeFormatInfo.InvariantInfo , System.Globalization.DateTimeStyles.None, out date)) 
    { 
     return true; 
    } 
    else 
    { 
     return false ; 
    } 
} 
+0

il ne valide pas complètement pour les dates correctes: bool date = isValidDate ("31", "02", "2008"); // retourne vrai mais devrait être faux – Sk93

Questions connexes