注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

简约男人

简约,不能简单

 
 
 

日志

 
 
关于我

一个过分渴望被理解的人其实就是一个软弱的人, 勇往直前的力量来自斩钉截铁的决心,不是来自别人的理解.

网易考拉推荐

实数检查正则表达式  

2010-08-07 15:29:38|  分类: C\C++\C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

网上搜到不少常用正则表达式其中关于实数检查的部分都不够准确,考虑的不够全面。本人向高手索要了几个,然后照葫

芦画瓢的写了几个,然后整合到一起写了个实数检查类。这个类对于编写涉及到数值计算的程序来说是很重要的,可以用

来检查用户在用户界面的控件里输入的结果对不对。

using System;
using System.Text;

namespace Open
{
    /// <summary>
    /// 实数检查器,用于检查一个串是不是具有实数字面量的形式
    /// </summary>
    public static class RealNumChecker
    {
        private static ErrorProvider errorProvider = new ErrorProvider();

        /// <summary>
        ///  是不是"数字串"——正确
        /// </summary>
//“数字串” 只由0-9这10个数字组成的串
        public static Boolean IsNumStr(String str)
        {
            String pattern = @"^[0-9]d*$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是"数的字面值"——正确
        /// </summary>
//“数的字面值”或者说“数的文本值”是数学中数的正常书写形式。比如0.0、0.3、3、+3、+0.3、-0.3、3、0、0.00

等,这都是合格的数的书写形式。但是连续多个零(如000)、正负号加上连续多个零(如+0 -0 +00)、一个或多个零开

头的整数(如003、+003)以及前述模式后再跟一个小数点的形式的一次或多次重复(如000.、00.3.3 03.36),还有多

个零开头的小数(如00.3 -000.3)等都属于非正常的书写形式。这里提到的都是容易忽视的错误模式,虽然其中有许多

是能够被C#、java等语言中的parse函数成功解析为对应的数值。
        public static Boolean IsNumber(String str)
        {
            String pattern = @"^[+-]?(?!0\d)\d+(\.[0-9]+)?$";//^[+-]?([1-9][0-9]*|0)(\.[0-9]+)?$
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“正数的字面值”——正确
        /// </summary>
        public static Boolean IsPositive(String str)
        {
            String pattern = @"^[+]?[1-9]\d*\.?\d*|0\.\d*[1-9]\d*$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“负数的字面值”——正确
        /// </summary>
        public static Boolean IsNegative(String str)
        {
            //^(?<= |^)-(?!00+\b)\d+(\.\d+)?\b(?!\.)$
            String pattern = @"^-(?!0\d)\d+(\.[0-9]+)?$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“非负数的字面值”——正确
        /// </summary>
        public static bool IsNotNegative(string str)
        {
            //(?<= |^)\+?(?!00+\b)\d+(\.\d+)?\b(?!\.)
            String pattern = @"^[+]?([1-9][0-9]*|0)(\.[0-9]+)?$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“非正数的字面值”——正确
        /// </summary>
        public static bool IsNotPositive(string str)
        {
            //-([1-9][0-9]*|0)(\.[0-9]+)?
            //^(?<= |^)-(?!00+\b)\d+(\.\d+)?\b(?!\.)
            String pattern = @"^(?<= |^)(-(?!0\d)\d+(\.\d+)?|0)\b(?!\.)$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“整数的字面值”——正确
        /// </summary>
        public static bool IsInteger(string str)
        {
            //^(?<= |^)[+-]?(?!00+\b)\d+\b(?!\.)$(最好剔除+0 -0)
            String pattern = @"^([+-]?[1-9][0-9]*|0)$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“非零整数的字面值”——正确(最好去除以零开头的数字如 012)
        /// </summary>
        public static bool IsNotZeroInteger(string str)
        {
            String pattern = @"^(?<![+\-\d])[+-]?(?!0+\b)\d+\b(?!\.)$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“正整数的字面值”——正确
        /// </summary>
        public static Boolean IsPositiveInteger(String str)
        {
            //(?<= |^)\+?(?!0\d+\b)\d+\b(?!\.)
            String pattern = @"^(?<= |^)\+?(?!0+\b)\d+\b(?!\.)$";//
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“负整数的字面值”——正确
        /// </summary>
        public static Boolean IsNegativeInteger(String str)
        {
            String pattern = @"^(?<= |^)\-(?!0+\b)\d+\b(?!\.)$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        ///  判断一个串是不是“非负整数的字面值”——正确
        /// </summary>
        public static Boolean IsNotNegativeInteger(String str)
        {
            String pattern = @"^(?<= |^)\+?(?!00+\b)\d+\b(?!\.)$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        ///  判断一个串是不是“非正整数的字面值”——正确
        /// </summary>
        public static Boolean IsNotPositiveInteger(String str)
        {
            String pattern = @"^(-[1-9][0-9]*|0)$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“小数的字面值”——正确
        /// </summary>
        public static bool IsFloat(string str)
        {
            String pattern = @"^[+-]?(?!0\d)\d+\.\d+\b(?![.])$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“正小数的字面值” ——正确
        /// </summary>
        public static Boolean IsPositiveFloat(String str)
        {
            String pattern = @"^[+]?[1-9]\d*\.\d*|0\.\d*[1-9]\d*$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“负小数的字面值” ——正确
        /// </summary>
        public static Boolean IsNegativeFloat(String str)
        {
            //^-(?!0\d)\d+\.\d+\b(?![.])$
            String pattern = @"^(-[1-9]\d*\.\d*)|(-0\.\d*[1-9]\d*)$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        ///  判断一个串是不是“非负小数的字面值”——正确
        /// </summary>
        public static Boolean IsNotNegativeFloat(String str)
        {
            String pattern = @"^[+]?[1-9]\d*\.\d*|0\.\d*$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        ///  判断一个串是不是“非正小数的字面值”——正确
        /// </summary>
        public static Boolean IsNotPositiveFloat(String str)
        {
            String pattern = @"^(-[1-9]\d*\.\d*)|(-0\.\d*[1-9]\d*)|(0\.\0*)$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“分式的字面值”——正确
        /// </summary>
//分式只是为了特殊情况的需要,所以也准备了一些。分式就是“真分数的字面值”或者“真分数的文本值”,分数的书

写形式一般是正负号加上一个以横线为分隔的上边一个非负整数下边一个正整数的形式。但是在电脑上输入时通常用“/

”代替横线,然后上边的非负整数放到左边、下边的正整数放到右边。如2/1、+1/3、-56/36等。
        public static bool IsFraction(string str)
        {
            String pattern = @"[+-]?([1-9][0-9]*|0)\/[1-9][0-9]*";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“正分式的字面值” [+]a/b——正确
        /// </summary>
        public static bool IsPositiveFraction(string str)
        {
            String pattern = @"^[+]?\b(?!0\d)\d+/(?!0)\d+\b$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“除式的字面值” [-/+]a/b——正确
        /// </summary>
//除式是分式的放宽,表示除法计算的书写形式。在除法形式中与分式对应的两个数分别是非负数和正数。如0.3/0.6、

+0.6/56、+0.0/2.3、-0/3.6等。除式也是为了特殊情况的需要。当然这里除式的形式可以继续放宽以使其符合数学里的

书写形式,如-59/-36、-59/36.0、-56/39.9、59/35、+59/35等以除号分隔的两个数的形式。
        public static bool IsDividePattern(string str)
        {
            //^[+-]?([1-9][0-9]*|0)(\.[0-9]+)?\/(?!0(\.0+)?$)([1-9][0-9]*|0)(\.[0-9]+)?$
            String pattern = @"^[+-]?\b(?!0\d)\d+(\.\d+)?/([1-9]\d*\.?\d*|0\.\d*[1-9]\d*)$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

        /// <summary>
        /// 判断一个串是不是“正除式的字面值” [+]a/b——正确
        /// </summary>
        public static bool IsPositiveDividePattern(string str)
        {
            //^[+-]?([1-9][0-9]*|0)(\.[0-9]+)?\/(?!0(\.0+)?$)([1-9][0-9]*|0)(\.[0-9]+)?$
            String pattern = @"^[+]?\b(?!0\d)\d+(\.\d+)?/([1-9]\d*\.?\d*|0\.\d*[1-9]\d*)$";
            return System.Text.RegularExpressions.Regex.IsMatch(str, pattern);
        }

    }//end of class
}//end of namespace

  评论这张
 
阅读(3783)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017