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

时间:2015-06-19 11:47:37

标签: c#

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

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();
     }
}

6 个答案:

答案 0 :(得分:2)

   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 :(得分:1)

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);
}

答案 2 :(得分:0)

我认为问题是,你也想支持空格(比如你的例子Kamran Khan)。在这种情况下,您的表达式必须是:

[a-zA-Z ]+

(在结束括号前注意空白)

同样做txtName.Text.Remove(txtName.Text.Length - 1);非常脆弱。如果用户在文本开头输入数字,会发生什么?

答案 3 :(得分:0)

如果你想获得正则表达式免费版本,那么最简单的方法是像你一样处理TextChanged事件,但检查输入的是什么。也适用于'粘贴'。

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;
}

答案 4 :(得分:0)

最好不要使用正则表达式,而只是检查字符串中是否有任何数字。

对此的一个解决方案如下,使用System.Linq

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

作为旁注:给孩子一个包含数字

的名字并不完全违法

当前正则表达式不匹配的名称示例

  • 玛丽珍
  • 弗雷德里克
  • 马兹

答案 5 :(得分:0)

你需要的只是

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