xuwenyan

在平时的开发中对输入的限制常常用到,这里列举一种限制只能输入数字类型的,还有很多方法,希望大家补充!
例:限制在输入框中只输入数字,负号,小数点,删除键,退格键.
方法一:

private void textBox1_TextChanged(object sender, EventArgs e)
        
{
            
int ascii;
            
for (int i = 0; i < textBox1.Text.Length; i++)
            
{
                ascii 
= textBox1.Text[i];
                
if (!((ascii > 47 && ascii < 57|| ascii == 45 || ascii==46))
                
{
                    textBox1.Text 
= textBox1.Text.Remove(i, 1);
                }

            }

        }


原理:最原始的办法,直接对输入的内容进行检查,负号的ascii码为45, 点为46, 0~9为48~57
点评:效率底,输入其他的字符时,光标会移到第一位,不能判别负号只能在第一位

方法二:

private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        
{
            
int ascii = e.KeyChar;
            
if (!((ascii > 47 && ascii < 57|| ascii == 45 || ascii == 46||ascii==8))
            
{
                e.Handled 
= true;
            }

        }

 
原理:同方法一,直接对当前按下的键值进行检查,退格键为8
点评:效率较方法一有所提高,最普遍采用的方法,依然不能判别负号只能在第一位

方法三:

using System.Text.RegularExpressions;

 
public bool IsNumeric(string itemValue)
        
{
            
try
            
{
                Regex numRegex 
= new Regex(@"^\d+$");
                
//Regex numRegex=new Regex(@"^(-?[0-9]*[.]*[0-9]*)$");
                Match Result = numRegex.Match(itemValue);
                
if (Result.Success)
                
return true; }
                
else
                
return false; }
            }

            
catch (FormatException ex)
            
{
                
return false;
            }

            
catch (Exception ex)
            
{
                
return false;
            }

        }


        
private void textBox3_Leave(object sender, EventArgs e)
        
{
            
if (!IsNumeric(textBox3.Text))
            
{
                textBox3.Focus();
                MessageBox.Show(
"只能为数字!");
            }

        }



原理:利用正则表达式和异常处理
点评:灵活性大,可很容易的移植到其他的类型,不能实时判断,只能一次判断整个字符串,try...catch语句效率不高,不过可以不放在try...catch语句里

方法四:

public bool IsNumeric(string str)
        
{
            
bool b = true;
            
foreach (char c in str)
            
{
                b 
= Char.IsNumber(c);
                
if (b != true)
                    
return false;
            }

            
return true;
        }


原理:改写IsNumeric方法,只能用于数字字符串,不能用于数值型
点评:简单,用于特定

方法五:

Regex.IsMatch(Request.Form["text1"], "^\\d+$")


原理:同方法三
点评:方法三的简写,简单,灵活

方法六:

protected bool IsNumeric(string TestString)
{
   
string SpecSign="0123456789";
   
for(int i=0;i<TestString.Length;i++)
   
{
      
while(SpecSign.IndexOf(TestString[i])==-1)
        
return false;
   }

  
return true;
}


原理:同方法四
点评:效率差

方法七:

public bool IsNumeric2(string str)
        
{
            
try
            
{
                
//int.Parse(str);
                float.Parse(str);
                
return true;
            }

            
catch (Exception ex)
            
{
                
return false;
            }

        }


原理:利用转化异常
点评:可以直接判断输入的是否为某一类型


推荐:
方法二,方法七和正则表达式

 

分类:

技术点:

相关文章: