using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Configuration;

namespace FOUPOS.DBUtility
{
    /// <summary>
    /// 提供经常需要使用的一些验证逻辑。
    /// </summary>
    public class Validator
    {
        /// <summary>
        /// 检查一个字符串是否可已转化为日期，一般用于验证用户输入日期的合法性。
        /// </summary>
        /// <param name="_value">需验证的字符串。</param>
        /// <returns>是否可已转化为日期的bool值。</returns>
        public static bool IsStringDate(string _value)
        {
            DateTime dt;
            try
            {
                dt = DateTime.Parse(_value);
            }
            catch (FormatException e)
            {
                //日期格式不正确时
                Console.WriteLine(e.Message);
                return false;
            }
            return true;
        }

        /// <summary>
        /// 检查一个字符串是否是纯数字构成的，一般用于查询字符串参数的有效性验证。
        /// </summary>
        /// <param name="_value">需验证的字符串。。</param>
        /// <returns>是否合法的bool值。</returns>
        public static bool IsNumberId(string _value)
        {
            return Validator.QuickValidate("^[1-9]*[0-9]*$", _value);
        }

        /// <summary>
        /// 检查一个字符串是否是纯字母和数字构成的，一般用于查询字符串参数的有效性验证。
        /// </summary>
        /// <param name="_value">需验证的字符串。</param>
        /// <returns>是否合法的bool值。</returns>
        public static bool IsLetterOrNumber(string _value)
        {
            return Validator.QuickValidate("^[a-zA-Z0-9_]*$", _value);
        }

        /// <summary>
        /// 判断是否是数字，包括小数和整数。
        /// </summary>
        /// <param name="_value">需验证的字符串。</param>
        /// <returns>是否合法的bool值。</returns>
        public static bool IsNumber(string _value)
        {
            return Validator.QuickValidate("^(0|([1-9]+[0-9]*))(.[0-9]+)?$", _value);
        }

        /// <summary>
        /// 快速验证一个字符串是否符合指定的正则表达式。
        /// </summary>
        /// <param name="_express">正则表达式的内容。</param>
        /// <param name="_value">需验证的字符串。</param>
        /// <returns>是否合法的bool值。</returns>
        public static bool QuickValidate(string _express, string _value)
        {
            System.Text.RegularExpressions.Regex myRegex = new System.Text.RegularExpressions.Regex(_express);
            if (_value.Length == 0)
            {
                return false;
            }
            return myRegex.IsMatch(_value);
        }
        /// <summary>
        /// 检测手机号码的合法性
        /// </summary>
        /// <param name="M"></param>
        /// <returns></returns>
        public static bool TelCheck(string M)
        {
            //	\d{4}\-\d{8}|
            try
            {
                long.Parse(M);
            }
            catch
            {
                return false;
            }
            RegexOptions options = RegexOptions.Multiline;
            Regex regex = new Regex(@"13\d{9}|159\d{8}|01\d{9}|02\d{9}|0[^1-2]\d{9}|0[^1-2]\d{10}", options);
            bool isMatch = regex.IsMatch(M);
            return isMatch;
        }
        /// <summary>
        /// 当字符为空或者空格时返回的值
        /// </summary>
        /// <param name="str"></param>
        /// <param name="Result"></param>
        /// <returns></returns>
        public static string StringTryConvert(System.DBNull str, string Result)
        {
            return Result;
        }

        public static string StringTryConvert(string str, string Result)
        {
            if (str != null && str != "")
            {
                return str;
            }
            else
            {
                return Result;
            }
        }

        /// <summary>
        /// 过滤ＳＱＬ非法字符
        /// </summary>
        /// <param name="SqlStr"></param>
        /// <returns></returns>
        public static string SqlStrCheck(string SqlStr)
        {
            return SqlStr.Replace("'", "‘");
        }

        //生成永不重复的GUID
        public static string Str_GetGUID()
        {
            string RtnStr = "";
            Guid guid = Guid.NewGuid();
            uint GuidHashCode = (uint)guid.GetHashCode();
            RtnStr = GuidHashCode.ToString();
            return RtnStr;
        }

    }
}
