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
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);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|