[【isnumber函数】ISNUMBER函数用法实例]isnumber函数
篇一:别误用IsDigit与IsNumber函数
Char.IsDigit与Char.IsNumber的区别
需要判断Char是否为数字,查看了下MSDN,发现有三种方法:
Char.IsDigit (aChar) 指示指定字符串中位于指定位置处的字符是否属于十进制数字类别
Char.IsNumber(aChar) 指示指定字符串中位于指定位置的字符是否属于数字类别
aChar='0'aChar='9' 判断aChar是否位于‘0’到‘9’之前 等同于第一种
用.NET Reflector 查看其实现代码:
1. {
2. if (!IsLatin1(c))
3. {
4.return CheckNumber(CharUnicodeInfo.GetUnicodeCategory(c));
5. }
6. if (!IsAscii(c))
7. {
8.return CheckNumber(GetLatin1UnicodeCategory(c));
9. }
10. return ((c = '0') (c = '9'));
11. }
1. {
2. if (!IsLatin1(c))
3. {
4.return (CharUnicodeInfo.GetUnicodeCategory(c) ==
5. nicodeCategory.DecimalDigitNumber);
6. }
7. return ((c = '0') (c = '9'));
8. }
篇二:别误用IsDigit与IsNumber函数
别误用IsDigit与IsNumber函数
1、起因
最近发现程序中有一段控制TextBox数字输入的代码,相信大家都不会太陌生,如下:
void int_KeyPress(object sender, KeyPressEventArgs e){
const char Delete = (char)8;
isnumber函数的使用方法及实例 if (!Char.IsDigit(e.KeyChar) e.KeyChar != Delete) {
e.Handled = true;
}
}
乍一看,好像没有啥问题,但是却出现了一个bug,能够输入全角的数字,如:0、1、2、3等。错误的根源就是上面代码中用到的IsDigit函数,于是就有了下面的一番探究,让我们来看看IsDigit函数的真面目。
2、IsDigit函数
查阅MSDN,告知该函数是判断字符是Unicode的十进制数字的函数。在查看其源代码 public static bool IsDigit(char c)
{
if (!IsLatin1(c)) return CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber;
return c = '0' c = '9';
}
第一行的IsLatin1函数是判断字符是0~255的函数,而全角的0、1、2、3等的Unicode编码不在这个范围,于是就执行了下面这句代码:
CharUnicodeInfo.GetUnicodeCategory(c) == UnicodeCategory.DecimalDigitNumber;
而对于Unicode的分类中,半角的1,2,3和全角的0、1、2、3等都被归为了DecimalDigitNumber,所以对于全角的数字,这个函数返回了true。
还有一个函数IsNumber和IsDigit功能相似,我们是否可以用它来代替呢?看下面的分析
3、IsNumber函数又是何物?
先看看这个函数的定义
public static bool IsNumber(char c)
{
if (!IsLatin1(c)) return CheckNumber(CharUnicodeInfo.GetUnicodeCategory(c));
if (!IsAscii(c)) return CheckNumber(GetLatin1UnicodeCategory(c)); return c = '0' c = '9';
}
internal static bool CheckNumber(UnicodeCategory uc)
{
switch (uc)
{
case UnicodeCategory.DecimalDigitNumber:
case UnicodeCategory.LetterNumber:
case UnicodeCategory.OtherNumber:
return true;
}
return false;
}
和IsDigit函数相比有3点区别:
1)多了一个UnicodeCategory.LetterNumber类型
2)多了一个UnicodeCategory.OtherNumber类型
3)多了一个IsAscii的判断(0~127)
很显然IsNumber的范围更广了。下面列举几种IsNumber认为是数字的字符 UnicodeCategory.LetterNumber:Ⅰ、Ⅱ、Ⅲ
UnicodeCategory.OtherNumber:①、②、③
128~255中有哪些字符会被IsNumber认为是数字,有兴趣的可以自己去测试。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论