2017-07-09 3 views
2

Je suis en train de créer un formulaire Windows qui ne doit autoriser qu'un mot de passe lorsqu'il correspond à certains critères. Je suis proche de la finition mais je suis un peu coincé avec un élément. "le premier et le dernier caractère du mot de passe DOIVENT être des nombres".Assurez-vous que les premier et dernier caractères de la zone de texte sont des nombres C#

en regardant mon code actuel comment pourrais-je faire à ce sujet parce que j'ai ZERO idée. Donc, les pas de bébé et la patience seraient appréciés.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Text.RegularExpressions; 

namespace password_test 
{ 
    public partial class Form1 : Form 
    { 

     bool Finished = false; 


     private bool TestPassword(string passwordText, int minimumLength =  5, int maximumLength = 12, int minimumNumbers = 1, int minimumLetters = 1) 
    { 


     int letters = 0; 
     int digits = 0; 
     int minLetters = 0; 


     if (passwordText.Length < minimumLength) 
     { 
      MessageBox.Show("You must have at least " + minimumLength + " characters in your password."); 
      return false; 
     } 

     if (passwordText.Length > maximumLength) 
     { 
      MessageBox.Show("You must have no more than " + maximumLength + " characters in your password."); 
      return false; 
     } 

     foreach (var ch in passwordText) 
     { 
      if (char.IsLetter(ch)) letters++; 
      if (char.IsDigit(ch)) digits++; 

      if (ch > 96 && ch < 123) 
      { 
       minLetters++; 
      } 
     } 


     if (digits < minimumNumbers) 
     { 
      MessageBox.Show("You must have at least " + minimumNumbers + " numbers in your password."); 
      return false; 
     } 

     if (minLetters < minimumLetters) 
     { 
      MessageBox.Show("You must have at least " + minimumLetters + " letter in your password"); 
      return false; 
     } 
     Finished = true; 
     return true; 


    } 


    public Form1() 
    { 
     InitializeComponent(); 
    } 


    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 

    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 

    private void butConfirm_Click(object sender, EventArgs e) 
    { 





     if (txtPassword.Text == txtRetypePassword.Text) 
     { 
       bool temp = TestPassword(txtPassword.Text, 10, 100, 1, 1); 


      if (Finished == true) 
      { 
       MessageBox.Show("Password Accepted"); 
       Application.Exit(); 
       //this.Hide(); 
       //Form2 f2 = new Form2(); 
       //f2.ShowDialog(); 

      } 
     } 


     else 
     { 
      MessageBox.Show("Please ensure the passwords you have typed match"); 
      return; 
     } 


    } 

    private void txtPassword_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (!char.IsControl(e.KeyChar) && !char.IsLetterOrDigit(e.KeyChar)) 
     { 
      e.Handled = true; 
     } 
     else 
     { 
      return; 
     } 
    } 

    private void txtRetypePassword_TextChanged(object sender, EventArgs e) 
    { 

    } 




} 
} 

Répondre

0

Avant Finished = true; vous pouvez simplement faire votre chèque:

if (!char.IsDigit(passwordText[0]) || !char.IsDigit(passwordText[passwordText.Length - 1])) 
{ 
    MessageBox.Show("The first and last characters of the password have to be numbers"); 
    return false; 
} 
Finished = true; 

Vous devez également respecter une longueur minimale dans votre méthode.

+0

Merci beaucoup l'homme! –

+0

Pas de problème. Vous pouvez marquer la réponse comme correcte pour que les autres personnes qui la regardent connaissent la réponse. –

+0

Comment inverserais-je cela afin que le premier et le dernier caractère ne soient pas des nombres? –

0

Ou vous pouvez utiliser Regex Test Pattern

// ^\d = start with digit 
    // \d$ end with digit 
    // .{3,10} including start and ending, min 5 max 12 
    if (!Regex.IsMatch(str, @"\d.{3,10}\d$") 
    { 
     // Invalid 
    } 

Utilisez \ D pour inverser.