Länge einer Zahl berechnen. C#

Betty

Stammuser
Hallo,
ich möchte gerne eine in C# die länge einer Zahl kontrollieren (es handelt sich um eine Telefonnummer die ich eingebe). Ich habe es folgendermaßen versucht.
Code:
        private void cmdcalcul_Click(object sender, EventArgs e)
        {
            int n = Convert.ToInt32(txttelefon);
            double nr = Math.Floor(Math.Log10(n) + 1);
            if (nr != 10)
            {
                
                MessageBox.Show("Die Telefonnummer wurde nicht richtig eingegeben. Bitte geben Sie sie erneut ein", " ERROR");
                txttelefon.Clear();
                txttelefon.Focus();
            }
Die Methode habe ich im Internet gefunden. Vorher habe ich es mit anderen Methoden auch versucht, jedoch hat es nicht funktionier. Habt ihr vielleicht eine Idee? Danke
 

simcup

New member
txttelefon?

ich könnte mich irren, aber der name der variable lässt vermuten das du bereits eine string variante der nummer hast. wenn du garantieren kannst das der input nur ziffern sind sollte eine einfache stringLength (oder halt entsprechndes equivalent bei c#) ausreichen. ansonsten könntest du eine menge/array/whatever mit den werten 0-9 machen und "for" jedes zeichen in txttelefon eine in_array operation machen. so würde ich das hinhacken.
 

Betty

Stammuser
Ich habe diese Varianten schon ausprobiert, jedoch wir bei mir Lenght immer durchgestrichen. Wieso ist das? Und wird die Länge dann eine int Zahl sein sodass ich if(Zahl != 10) machen kann?
 

Betty

Stammuser
Code:
string n = null;
            n = txttelefon.Text;
            int nr = n.Length;

            if (nr != 10)
            {

                MessageBox.Show("Numarul de telefon nu are lungimea necesara de 10 cifre. Va rugam introduceti numarul corect", " ERROR");
                txttelefon.Clear();
                txttelefon.Focus();
            }

Jetzt geht es. Danke für eure hilfe.
 

BasicAvid

Member
Du prüfst aber jetzt nur die Länge auf 10 Zeichen, somit könnte man jetzt auch nur Buchstaben eingeben und diese würde als valide angesehen, was aber dann wohl eher nicht dem entspricht, was du erwartest.

Am besten, Du gibst das Format vor und prüfst die Eingabe per Regex. So kannst Du dir sicher sein, dass die Telefonnummer vom Format her valide ist.
 

simcup

New member
klugscheiß, klugscheiß

für die "RegExp ist mir zu kompliziert"-version könnte man wahlweise it einer forschleife die zeichen durchinterieren und gucken ob sie in der menge [0,1,2,3,4,5,6,7,8,9] vorkommen.
 

Ark

Stammuser
Man könnte auch einfach immer in einer while schleife die letzte Ziffer abschneiden bis keine mehr Übrig ist und diesen Vorgang in einem Counter festhalten. Ist natürlich nicht sehr elegant :D ...
 

BasicAvid

Member
für die "RegExp ist mir zu kompliziert"-version könnte man wahlweise it einer forschleife die zeichen durchinterieren und gucken ob sie in der menge [0,1,2,3,4,5,6,7,8,9] vorkommen.

Das ganze ist eigenlich nicht wirklich kompliziert, hier mal ein Beispiel:

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace RegExpTestProject
{
    public partial class frmRegExpTest : Form
    {
        Regex regex = new Regex(@"^\d{10}$");

        public frmRegExpTest()
        {
            InitializeComponent();
        }

        private void btnCheck_Click(object sender, EventArgs e)
        {
            if (!regex.IsMatch(txtPhonenumber.Text))
            {
                MessageBox.Show("Is not valid!", "Error", MessageBoxButtons.OK);
                return;
            }
            MessageBox.Show("Is valid!", "Success", MessageBoxButtons.OK);
        }

        private void txtPhonenumber_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((!Char.IsDigit(e.KeyChar) || txtPhonenumber.Text.Length + 1 > 10) && e.KeyChar != (char)Keys.Delete && e.KeyChar != (char)Keys.Back)
            {
                e.Handled = true;
            }
        }
    }
}
Im Click Event handler siehst Du wie man es mit einem RegEx lösen kann und im KeyPress Event handler kannst Du sehen wie es auch ohne RegEx möglich ist.
 
Oben