| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- using System;
- using System.Text;
- using System.Text.RegularExpressions;
- namespace Top.Api.Util
- {
- public abstract class StringUtil
- {
- private const string pattern = @"^\d*$";
- private static readonly Regex REG_CIDR = new Regex("^(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})/(\\d{1,2})$");
- public static bool IsNumeric(string obj)
- {
- if (obj == null)
- {
- return false;
- }
- char[] chars = obj.ToCharArray();
- int length = chars.Length;
- if (length < 1)
- return false;
- int i = 0;
- if (length > 1 && chars[0] == '-')
- i = 1;
- for (; i < length; i++)
- {
- if (!Char.IsDigit(chars[i]))
- {
- return false;
- }
- }
- return true;
- }
- public static bool IsDigits(string value)
- {
- if (string.IsNullOrEmpty(value))
- {
- return false;
- }
- return Regex.IsMatch(value, pattern);
- }
- public static string[] Split(string data, char separatorChar)
- {
- if (string.IsNullOrEmpty(data))
- {
- return null;
- }
- return data.Split(new char[] { separatorChar }, StringSplitOptions.RemoveEmptyEntries);
- }
- public static string ToCamelStyle(string name)
- {
- if (string.IsNullOrEmpty(name))
- {
- return name;
- }
- char[] chars = name.ToCharArray();
- StringBuilder buf = new StringBuilder(chars.Length);
- for (int i = 0; i < chars.Length; i++)
- {
- if (i == 0)
- {
- buf.Append(char.ToLower(chars[i]));
- }
- else
- {
- buf.Append(chars[i]);
- }
- }
- return buf.ToString();
- }
- public static string ToUnderlineStyle(string name)
- {
- if (string.IsNullOrEmpty(name))
- {
- return name;
- }
- StringBuilder buf = new StringBuilder();
- for (int i = 0; i < name.Length; i++)
- {
- char c = name[i];
- if (char.IsUpper(c))
- {
- if (i > 0)
- {
- buf.Append("_");
- }
- buf.Append(char.ToLower(c));
- }
- else
- {
- buf.Append(c);
- }
- }
- return buf.ToString();
- }
- public static string EscapeXml(string value)
- {
- if (string.IsNullOrEmpty(value))
- {
- return value;
- }
- StringBuilder buf = new StringBuilder();
- char[] chars = value.ToCharArray();
- for (int i = 0; i < chars.Length; i++)
- {
- char c = chars[i];
- switch (c)
- {
- case '<':
- buf.Append("<");
- break;
- case '>':
- buf.Append(">");
- break;
- case '\'':
- buf.Append("'");
- break;
- case '&':
- buf.Append("&");
- break;
- case '"':
- buf.Append(""");
- break;
- default:
- if ((c == 0x9) || (c == 0xA) || (c == 0xD) || ((c >= 0x20) && (c <= 0xD7FF))
- || ((c >= 0xE000) && (c <= 0xFFFD)) || ((c >= 0x10000) && (c <= 0x10FFFF)))
- {
- buf.Append(c);
- }
- break;
- }
- }
- return buf.ToString();
- }
- public static string FormatDateTime(DateTime dateTime)
- {
- return dateTime.ToString(Constants.DATE_TIME_FORMAT);
- }
- public static bool IsIpInRange(string ipAddr, string cidrAddr)
- {
- Match match = REG_CIDR.Match(cidrAddr);
- if (!match.Success)
- {
- throw new TopException("Invalid CIDR address: " + cidrAddr);
- }
- int[] minIpParts = new int[4];
- int[] maxIpParts = new int[4];
- string[] ipParts = match.Groups[1].Value.Split(new string[1] { "." }, StringSplitOptions.None);
- int intMask = int.Parse(match.Groups[2].Value);
- for (int i = 0; i < ipParts.Length; i++)
- {
- int ipPart = int.Parse(ipParts[i]);
- if (intMask > 8)
- {
- minIpParts[i] = ipPart;
- maxIpParts[i] = ipPart;
- intMask -= 8;
- }
- else if (intMask > 0)
- {
- minIpParts[i] = ipPart >> intMask;
- maxIpParts[i] = ipPart | (0xFF >> intMask);
- intMask = 0;
- }
- else
- {
- minIpParts[i] = 1;
- maxIpParts[i] = 0xFF - 1;
- }
- }
- string[] realIpParts = ipAddr.Split(new string[1] { "." }, StringSplitOptions.None);
- for (int i = 0; i < realIpParts.Length; i++)
- {
- int realIp = int.Parse(realIpParts[i]);
- if (realIp < minIpParts[i] || realIp > maxIpParts[i])
- {
- return false;
- }
- }
- return true;
- }
- }
- }
|