2010-06-09 2 views
3

Comment vérifier ou valider la date de saisie de la zone de texte au format DD/MM/YYYY?Comment vérifier ou valider la date de saisie de la zone de texte au format JJ/MM/AAAA?

+5

Veuillez ne pas utiliser le format JJ/MM/AAAA. Il existe une norme internationale, AAAA-MM-JJ (ISO8601) –

+3

Mieux encore, utilisez un contrôle de calendrier plutôt qu'une zone de texte. –

+15

@Pavel: Essayez de le dire au grand public, qui a l'habitude d'écrire des dates dans leur format local – MPritchard

Répondre

18

Markup:

<asp:Textbox runat="server" ID="TextBox1" /> 
<asp:CustomValidator runat="server" ControlToValidate="TextBox1" ErrorMessage="Date was in incorrect format" OnServerValidate="CustomValidator1_ServerValidate" /> 

code-behind:

protected void CustomValidator1_ServerValidate(object sender, ServerValidateEventArgs e) 
{ 
    DateTime d; 
    e.IsValid = DateTime.TryParseExact(e.Value, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out d); 
} 

si vous souhaitez autoriser plusieurs formats et ne les, utilisez suivant:

DateTime.TryParseExact(e.Value, new[] { "dd/MM/yyyy", "yyyy-MM-dd" }, CultureInfo.InvarinatCulture, DateTimeStyles.None, out d); 
-2

Vous ne pouvez pas. User une sorte de sélecteur de datetime à la place. Exemple here.

+0

-1 pourquoi exactement? – fearofawhackplanet

+2

Probablement parce que * peut * être validé. (pas moi downvoting btw) –

+0

Non, il ne peut pas. Sauf si vous avez un ordinateur magique qui peut lire les esprits des gens. 01/12/2010 = jj/mm/aaaa ou mm/jj/aaaa? – fearofawhackplanet

0

Vous pouvez utiliser un CustomValidator pour vérifier que la valeur entrée est comprise dans les paramètres définis.
I.e. 13/12/2001 est valide mais 12/12/2001 est invalide.

0

Vous pouvez utiliser un validateur personnalisé pour vérifier à peu près n'importe quoi dans la zone de texte, mais il peut être plus facile d'utiliser CompareValidator pour vérifier si le texte peut être converti en une date.

Je trouve un exemple (en VB, mais assez facile à lire et à traduire en C#) ici: http://quickstarts.asp.net/QuickStartv20/aspnet/doc/validation/default.aspx

Cependant, en utilisant certains pourraient être plus faciles à utiliser sorte de contrôle de sélecteur de date.

0

Il vaudra mieux utiliser un contrôle de calendrier, mais si vous voulez malgré tout vérifier la chaîne de date, utilisez le code suivant pour confirmer que le format est au format JJ/MM/AAAA.

DateTime dt; 
if (!DateTime.TryParse(texbox.Text, new System.Globalization.CultureInfo("en-GB"), System.Globalization.DateTimeStyles.None, dt)) 
{ 
    // text is not in the correct format 
} 
+0

Pourquoi exactement "en-GB"? – abatishchev

+0

fr-FR = paramètres de la culture anglaise britannique. Il utilise le format JJ/MM/AAAA –

+2

semble plus facile de spécifier le format de chaîne, en-GB peut autoriser d'autres variations aussi bien. – apoorv020

4

Une autre option utilise un validateur d'expressions régulières. L'expression régulière ci-dessous vérifie DD/MM/YYYY mais bien sûr il n'y a aucun moyen de distinguer si quelque chose comme 01 est DD ou MM. Sinon, ça fait l'affaire.

<asp:TextBox ID="txtDate" runat="server"/> 
<asp:RegularExpressionValidator ID="regexpName" runat="server"  
           ErrorMessage="This expression does not validate." 
           ControlToValidate="txtDate"  
           ValidationExpression="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$" /> 
0

Mon approche serait d'utiliser un regexvalidator pour un premier test rapide ("fait on dirait que ça pourrait être une date ") côté client. Et puis un CustomValidator avec un événement côté serveur qui essaie d'exécuter un DateTime.Parse avec mon format, pour exclure des dates comme "29 février 2010".

Personnellement, je ne fais pas confiance à CompareValidator ici, parce que je ne sais pas avec certitude quel format il utilise (mais cela peut être parce que je n'ai pas enquêté assez).

1
DateTime Result; 
DateTimeFormatInfo info = new DateTimeFormatInfo (); 
CultureInfo culture; 
culture = CultureInfo.CreateSpecificCulture ("en-US"); 
info.ShortDatePattern = "dd/MM/yyyy"; 
if (DateTime.TryParse (StrDate, info, DateTimeStyles.None, out Result)) 
{ 
    return StrDate; 
} 
+0

Les réponses au code uniquement sont déconseillées ici. Veuillez ajouter une description de la raison pour laquelle votre solution répond à la question. –

Questions connexes