在c#中的文本框中只允许使用字母名称


Allow only alphabetic name in text box in c#

我只需要允许用户在文本框中输入字母名称,例如jhon或kamran khan。我已经从不同的链接获得了信息,但还没有任何工作。在我的代码文本框中,获取以数字开头的值,例如3kamran,但我不需要允许3或任何其他数字。我正在使用C Windows应用程序,我的代码看起来像。

1
2
3
4
5
6
7
8
9
10
private void txtName_TextChanged(object sender, EventArgs e)
{
    if (System.Text.RegularExpressions.Regex.IsMatch(txtName.Text,"^[a-zA-Z]+$"))
    {
        MessageBox.Show("Enter Valid Name","Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        txtName.Text.Remove(txtName.Text.Length - 1);
        txtName.Clear();
        txtName.Focus();
     }
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   private void txtName_TextChanged(object sender, EventArgs e)
   {

    //here is the problem add ! in font

    if(!String.IsNullOrWhiteSpace(txtName)) // This will prevent exception when textbox is empty  
    {
    if (!System.Text.RegularExpressions.Regex.IsMatch(txtName.Text,"^[a-zA-Z]+$"))
        {
            MessageBox.Show("Enter Valid Name","Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            txtName.Text.Remove(txtName.Text.Length - 1);
            txtName.Clear();
            txtName.Focus();
         }
    }
   }


1
2
3
4
5
if (!System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text,"^[a-zA-Z]"))
{
    MessageBox.Show("This textbox accepts only alphabetical characters");
    textBox1.Text.Remove(textBox1.Text.Length - 1);
}


所有你需要的是 </P >

1
2
3
4
private void TextBox_KeyUp(object sender, KeyEventArgs e)
{
     e.Handled = char.IsLetter((char) e.Key);
}

你会更好的诠释,而不是使用正则表达式和精确的检查,如果有任何输入字符串的位的信息。 </P >

这是一个解决方案的使用System.Linq是这混蛋 </P >

1
2
if(txtName.Text.Any(char.IsDigit))
    // Contains numbers

作为一个边注:它是不是完全非法的给你的孩子一个名字是包含一号 </P >

实例名称是:你不会流的正则表达式匹配 </P >

  • 玛丽-简
  • é
  • M?归零码(RZ)

如果你喜欢山羊D正则表达式版本则无冰的simplest to handle the Way TextChanged事件为你了,但我的支票是型。工作也会"糊"。 </P >

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
string oldText = string.Empty;
private void txtName_TextChanged(object sender, EventArgs e)
{
    if (txtName.Text.All(chr => char.IsLetter(chr)))
    {
        oldText = txtName.Text;
        txtName.Text = oldText;

        txtName.BackColor = System.Drawing.Color.White;
        txtName.ForeColor = System.Drawing.Color.Black;
    }
    else
    {
        txtName.Text = oldText;
        txtName.BackColor = System.Drawing.Color.Red;
        txtName.ForeColor = System.Drawing.Color.White;
    }
    txtName.SelectionStart = txtName.Text.Length;
}

我认为问题的冰,那你也要支持空间(例如像在你的Kamran Khan)。在这样的案例表达你的需求是: </P >

1
[a-zA-Z ]+

(照顾的空格前的闭合支架) </P >

也做的很fraguile txtName.Text.Remove(txtName.Text.Length - 1);冰。什么是happens,如果用户这样的进入,一位在开始的文字吗? </P >