You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

233 lines
9.0 KiB

using Apewer;
using System;
using System.Collections.Generic;
using System.Text;
namespace Apewer.Internals
{
internal class TextVerifier
{
/// <summary>验证符串在父字符串中出现的次数。</summary>
/// <param name="argParent">父字符串。</param>
/// <param name="argSub">子字符串。</param>
/// <param name="argIgnoreCase">是否忽略大小写。</param>
public static int Exists(string argParent, string argSub, bool argIgnoreCase = false)
{
if (string.IsNullOrEmpty(argParent) || string.IsNullOrEmpty(argSub)) return 0;
string vp = argParent;
string vs = argSub;
int vr = 0;
int vl;
int vi;
try
{
if (argIgnoreCase) { vp = TextHelper.LCase(vp); vs = TextHelper.LCase(vs); }
vl = vs.Length;
vi = 1;
while (vi <= (vp.Length - vl + 1))
{
if (TextHelper.Mid(vp, vi, vl) == vs) { vr += 1; vi += vl; }
else vi += 1;
}
return vr;
}
catch { return 0; }
}
/// <summary>验证字符或字符串是否全部存在于字符池,默认选项等效于判断 (exists > 0) 是否为 True。</summary>
/// <param name="argPool">字符池,允许出现的字符组合。</param>
/// <param name="argSub">要查找的字符或字符串。</param>
/// <returns>若 _sub 不存在于 _parent,则返回 False。</returns>
public static bool Include(string argPool, string argSub)
{
return Include(argPool, argSub, false, false);
}
/// <summary>验证字符或字符串是否全部存在于字符池,默认选项等效于判断 (exists > 0) 是否为 True。</summary>
/// <param name="argPool">字符池,允许出现的字符组合。</param>
/// <param name="argSub">要查找的字符或字符串。</param>
/// <param name="argAlone">分别验证 _sub 里的每个字符,若为 False 则验证 _sub 整体。</param>
/// <returns>若 _sub 或 _sub 中任何一个字符不存在于 _parent,则返回 False。</returns>
public static bool Include(string argPool, string argSub, bool argAlone)
{
return Include(argPool, argSub, argAlone, false);
}
/// <summary>验证字符或字符串是否全部存在于字符池,默认选项等效于判断 (exists > 0) 是否为 True。</summary>
/// <param name="argPool">字符池,允许出现的字符组合。</param>
/// <param name="argSub">要查找的字符或字符串。</param>
/// <param name="argAlone">分别验证 _sub 里的每个字符,若为 False 则验证 _sub 整体。</param>
/// <param name="argIgnoreCase">是否忽略大小写。</param>
/// <returns>若 _sub 或 _sub 中任何一个字符不存在于 _parent,则返回 False。</returns>
public static bool Include(string argPool, string argSub, bool argAlone = false, bool argIgnoreCase = false)
{
//{
// bool vnp = string.IsNullOrEmpty(argpool);
// bool vns = string.IsNullOrEmpty(argsub);
// if (vnp && vns) return true;
// if ((!vnp) && vns) return true;
// if (vnp && (!vns)) return false;
//}
////try
//{
// string vp = argpool;
// string vs = argsub;
// if (argignorecase) { vp = vp.ToLower(); vs = vs.ToLower(); }
// if (argalone)
// {
// string vc;
// int vl = 0;
// for (int vi = 1; vi <= vs.Length; vi++)
// {
// vc = Mid(vs, vi, 1);
// int vinstr = InStr(vp, vc);
// if (InStr(vp, vc) > 0) vl += 1;
// }
// if (vl == vs.Length) return true;
// }
// else
// {
// if (InStr(vp, vs) > 0) return true;
// }
// return false;
//}
////catch
////{
//// return false;
////}
bool vnp = string.IsNullOrEmpty(argPool);
bool vns = string.IsNullOrEmpty(argSub);
if (vnp && vns) return true;
if ((!vnp) && vns) return true;
if (vnp && (!vns)) return false;
//try
{
string vp = string.IsNullOrEmpty(argPool) ? "" : argPool;
string vs = string.IsNullOrEmpty(argSub) ? "" : argSub;
if (argIgnoreCase) { vp = vp.ToLower(); vs = vs.ToLower(); }
if (argAlone)
{
var vcount = 0;
for (int vi = 0; vi < vs.Length; vi++)
{
if (vp.Contains(vs[vi].ToString())) vcount += 1; else break;
}
return vcount == vs.Length;
}
else
{
return argPool.Contains(argSub);
}
}
//catch
//{
// return false;
//}
}
/// <summary>验证字符串内容是否为 IP v4 地址,格式为“0.0.0.0”。</summary>
public static bool IsIP(string argIp)
{
if (string.IsNullOrEmpty(argIp)) return false;
try
{
string[] va;
va = TextUtility.Split(argIp, '.');
if (va.Length != 4) return false;
for (int i = 0; i <= 3; i++)
{
if (!IsInteger(va[i])) return false;
int vint = System.Convert.ToInt32(va[i]);
if (vint < 0) return false;
if (vint > 255) return false;
}
return true;
}
catch
{
return false;
}
}
///<summary>验证字符串内容是否为数字,包含整数和小数。</summary>
public static bool IsNumber(string argText)
{
if (IsInteger(argText)) return true;
if (IsDecimal(argText)) return true;
return false;
}
/// <summary>验证字符串内容是否为整数。</summary>
public static bool IsInteger(string argText)
{
//try
{
if (string.IsNullOrEmpty(argText)) return false;
string vtext = argText.Trim();
if (string.IsNullOrEmpty(vtext)) return false;
if (vtext.StartsWith("-")) vtext = TextHelper.Mid(vtext, 2, TextHelper.Len(vtext) - 1);
return Include(Constant.NumberCollection, vtext, true);
}
// catch { return false; }
}
/// <summary>验证字符串内容是否为小数,格式:0.0。</summary>
public static bool IsDecimal(string argText)
{
// try
{
string vtext = argText.Trim();
if (string.IsNullOrEmpty(vtext)) return false;
string[] va;
va = TextUtility.Split(vtext, '.');
if (va.Length == 2)
{
for (int vi = 0; vi <= 1; vi++) if (!IsInteger(va[vi])) return false;
return true;
}
return false;
}
// catch { return false; }
}
/// <summary>验证字符串内所有字符是否均为十六进制字符。</summary>
public static bool IsHex(string argText)
{
return Include(Constant.HexCollection, argText, true, true);
}
/// <summary>验证字符串内所有字符是否均为字母。</summary>
public static bool IsLetter(string argText)
{
if (string.IsNullOrEmpty(argText)) return false;
return Include(Constant.LetterCollection, argText, true, false);
}
/// <summary>验证字符串内所有字符是否均为大写字母。</summary>
public static bool IsUpper(string argText)
{
if (string.IsNullOrEmpty(argText)) return false;
return Include(Constant.UpperCollection, argText, true, true);
}
/// <summary>验证字符串内所有字符是否均为小写字母。</summary>
public static bool IsLower(string argText)
{
if (string.IsNullOrEmpty(argText)) return false;
return Include(Constant.LowerCollection, argText, true, true);
}
/// <summary>验证字符串内所有字符是否均为易识别字符。</summary>
public static bool IsLucid(string argText)
{
if (string.IsNullOrEmpty(argText)) return false;
return Include(Constant.LucidCollection, argText, true, true);
}
}
}