using Microsoft.AspNetCore.Mvc; using System.Text.RegularExpressions; using System.Xml.Serialization; namespace economy.Helpers { public class Common { // XML 데이터 직렬화 public static async Task ParseXmlDataAsync(string xmlData) where T : class { var serializer = new XmlSerializer(typeof(T)); using (var reader = new StringReader(xmlData)) { return await Task.Run(() => (T)serializer.Deserialize(reader)); } } // 시작 번호 조회 public static int CalcListNumber(int total, int page, int perPage) { return (total - ((page - 1) * perPage)); } // 천 단위 구분 형식으로 변환 public static string NumberFormat(string s, string format = "N0") { if (int.TryParse(s, out int clprValue)) { s = clprValue.ToString(format); } if (double.TryParse(s, out double doubleValue)) { return doubleValue.ToString(format); } if (decimal.TryParse(s, out decimal decimalValue)) { return decimalValue.ToString(format); } return s; } // 문자열 형태의 날짜를 포맷 형식으로 변환 public static string StringToDateFormat(string s, string format = "yyyy-MM-dd") { return DateTime.ParseExact(s, "yyyyMMdd", null).ToString(format); } // 도메인 형식 여부 public static bool IsDomain(string input) { return Regex.IsMatch(input, @"^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}$"); } // IPv4 형식 여부 public static bool IsIPv4(string input) { return Regex.IsMatch(input, @"^(\d{1,3}\.){3}\d{1,3}$"); } // IPv6 형식 여부 public static bool IsIPv6(string input) { return Regex.IsMatch(input, @"^([0-9a-fA-F]{1,4}:){1,7}[0-9a-fA-F]{1,4}(/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$"); } } }