如何只允许整数进入文本框

本文关键字:文本 整数 许整数 | 更新日期: 2023-09-27 18:23:37

我有一个优惠券应用程序,当有人想要创建活动优惠券时,他们必须指定的字段之一是"目标受众"。有时,用户可能会输入一个字符串或不是int的变量,服务器就会崩溃。我只想实现一个if语句,看看它是否不是int,然后做点什么。我有一个正则表达式,我只是不知道如何实现它。尝试了很多方法。(要验证的文本框为"campaignAudience")

System.Text.RegularExpressions.Regex.IsMatch(campaignAudience.Value, "[ ^ 0-9]");

如何只允许整数进入文本框

我最近需要一个类似的解决方案。假设您需要一个整数(没有小数点的数字)。

public static bool IntegerAndIsANumber(this string val)
    {
        if (string.IsNullOrEmpty(val) || val.Contains(',') || val.Contains('.'))
            return false;
        decimal decimalValue;
        if (!Decimal.TryParse(val, out decimalValue))
            return false;
        decimal fraction = decimalValue - (Int64)decimalValue;
        if (fraction == 0)
            return true;
        return false;
    }

它检查给定的字符串是否是整数,以及它是否首先是一个数字。

使用:

if(YourString.IntegerAndIsANumber()){
  //value is Integer
  }
  else{
  //incorrect value 
  }

p.S.也用这种扩展方法做了Unit testing

使用一个只接受数字的自定义TextBox,将以下内容添加到您的项目中,编译后,当您的窗体显示在IDE中时,自定义TextBox将显示在工具箱的顶部。将TextBox添加到表单中,现在用户只能输入数字。

using System;
using System.Windows.Forms;
public class numericTextbox : TextBox
{
    private const int WM_PASTE = 0x302;
    protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
    {
        string Value = this.Text;
        Value = Value.Remove(this.SelectionStart, this.SelectionLength);
        Value = Value.Insert(this.SelectionStart, e.KeyChar.ToString());
        e.Handled = Convert.ToBoolean(Value.LastIndexOf("-") > 0) || 
            !(char.IsControl(e.KeyChar) || 
              char.IsDigit(e.KeyChar) || 
            (e.KeyChar == '.' && !(this.Text.Contains(".")) || 
             e.KeyChar == '.' && this.SelectedText.Contains(".")) || 
            (e.KeyChar == '-' && this.SelectionStart == 0));
        base.OnKeyPress(e);
    }
    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        if (m.Msg == WM_PASTE)
        {
            string Value = this.Text;
            Value = Value.Remove(this.SelectionStart, this.SelectionLength);
            Value = Value.Insert(this.SelectionStart, Clipboard.GetText());
            decimal result = 0M;
            if (!(decimal.TryParse(Value, out result)))
            {
                return;
            }
        }
        base.WndProc(ref m);
    }
}

Linq版本:

if(campaignAudience.Value.All(x => Char.IsLetter(x)))
{
    // text input is OK
}

Regex版本:

if(new Regex("^[A-Za-z]*$").Match(campaignAudience.Value).Success)
{
    // text input is OK
}

将文本框的按键事件限制为数字