2012年1月2日 星期一

使用者都是白癡嗎為什麼我每次都要驗證textbox的值是不是整數或者有沒有超出範圍之寫個一勞永逸的類別

相信很多人在做作業時心中都有如標題

身為城市人不走鄉民路,用程式的方法一勞永逸

 

 

 

 

 

 

 

 

使用方法:

把doVerification.cs丟進專案

並且using CustomClass 就能直接使用

doVerification.doRegex()

doVerification.doRange()

這2個方法

方法需要的參數如說明

1:using CustomClass
doVerification.doRegex()需要2個參數
2:判斷的目標 型態為 string
3:驗證的方式 型態為列舉
	pattern.isPositiveInteger  //匹配正整數
	pattern.isNegativeInteger  //匹配負整數
	pattern.isInteger          //匹配整數
	pattern.NonNegativeInteger //匹配非負整數(正整數 + 0)
	pattern.NonPositiveInteger //匹配非正整數(負整數 + 0)
doVerification.doRange()需要5個參數
4:判斷的目標 型態為 string
5:起點值 型態為 int
6:目標是與起點的關係 型態為列舉
	isMoreThan                 //大於
	isMoreThanOrEqualTo        //大於等於
7:終點值 型態為 int
8:目標是與終點的關係 型態為列舉
	isLessThan                 //小於
	isLessThanOrEqualTo        //小於等於

使用結果:

abc警告非整數

-5不合範圍

5合範圍

 

 

如此一來以後只要面對要判斷textbox.Text是否數字且在範圍內的時候

就只要使用這2個方法而不必每次都再寫一遍

 

 

 

 

以下為程式碼

 

 

 

 



using System.Text.RegularExpressions;
using System.Text;
using System.Windows.Forms;

namespace CustomClass {
    public enum pattern {
        isPositiveInteger,
        isNegativeInteger,
        isInteger,
        NonNegativeInteger,
        NonPositiveInteger
    }
    public enum startType {
        isMoreThan,        
        isMoreThanOrEqualTo        
    }
    public enum endType {
        isLessThan,
        isLessThanOrEqualTo
    }    
    public class doVerification {
        public const string isPositiveInteger = @"^[1-9]\d*$";   //匹配正整數
        public const string isNegativeInteger = @"^-[1-9]\d*$";  //匹配負整數
        public const string isInteger = @"^-?[1-9]\d*|0$";         //匹配整數
        public const string NonNegativeInteger = @"^[1-9]\d*|0$";//匹配非負整數(正整數 + 0)
        public const string NonPositiveInteger = @"^-[1-9]\d*|0$";//匹配非正整數(負整數 + 0

        public static bool doRegex(string target, pattern pat) {
            string patternStr;
            switch (pat) {
                case pattern.isPositiveInteger:
                    patternStr = isPositiveInteger;
                    break;
                case pattern.isNegativeInteger:
                    patternStr = isNegativeInteger;
                    break;
                case pattern.isInteger:
                    patternStr = isInteger;
                    break;
                case pattern.NonNegativeInteger:
                    patternStr = NonNegativeInteger;
                    break;
                case pattern.NonPositiveInteger:
                    patternStr = NonPositiveInteger;
                    break;
                default:
                    patternStr = isInteger;
                    break;
            }
            Regex regex = new Regex(patternStr);
            return regex.IsMatch(target);
        }

        public static bool doRange(string target, int start, startType st, int end, endType et) {
            if (st == startType.isMoreThanOrEqualTo && et == endType.isLessThanOrEqualTo) {
                if (int.Parse(target) >= start && int.Parse(target) <= end) {
                    return true;
                } else {
                    return false;
                }
            }
            if (st == startType.isMoreThan && et == endType.isLessThan) {
                if (int.Parse(target) > start && int.Parse(target) < end) {
                    return true;
                } else {
                    return false;
                }
            }
            if (st == startType.isMoreThanOrEqualTo && et == endType.isLessThan) {
                if (int.Parse(target) >= start && int.Parse(target) < end) {
                    return true;
                } else {
                    return false;
                }
            }
            if (st == startType.isMoreThan && et == endType.isLessThanOrEqualTo) {
                if (int.Parse(target) > start && int.Parse(target) <= end) {
                    return true;
                } else {
                    return false;
                }
            }
            return false;                
        }
    }
}




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CustomClass;            //引用自訂類別

namespace MyHomework._0102 {
    public partial class FrmTest : Form {
        public FrmTest() {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e) {
            int start = 0;
            int end = 10;
            bool isPositiveInteger = doVerification.doRegex(textBox1.Text, pattern.isInteger);
           
            if (isPositiveInteger) {
                if (doVerification.doRange(textBox1.Text, start, startType.isMoreThanOrEqualTo, end, endType.isLessThanOrEqualTo)) {
                    MessageBox.Show(string.Format("{0} < {1} <= {2} 為 True", start, textBox1.Text, end));
                } else {
                    MessageBox.Show(string.Format("{0} < {1} <= {2} 為 False", start, textBox1.Text, end));
                }
            } else {
                MessageBox.Show("is not Integer");
            }
        }
    }
}


沒有留言:

張貼留言