我需要允许用户只在文本框中输入字母名称,例如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();
}
}
答案 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);
}