如何在C#中验证字符串是否由年份和周数组合构成
C# 年份周数字符串校验实现方案
简化版实现(符合你确认的周数≤53要求)
实现逻辑
- 校验输入字符串必须为6位纯数字
- 拆分取后2位作为周数,校验范围为1~53即可
代码示例
public static bool ValidateYearWeek(string input) { // 校验基础格式:非空+长度为6位 if (string.IsNullOrWhiteSpace(input) || input.Length != 6) return false; // 校验所有字符均为数字 foreach (char c in input) { if (!char.IsDigit(c)) return false; } // 提取后两位转换为周数 int week = int.Parse(input.Substring(4, 2)); // 按需求校验周数范围 return week >= 1 && week <= 53; }
扩展:精确校验方案(匹配对应年份实际最大周数,后续有需求可参考)
如果后续规则调整为需要校验周数不超过对应年份的实际最大周数,可以按照ISO 8601周数计算规则实现,参考代码如下:
using System.Globalization; public static bool ValidateYearWeekPrecise(string input) { // 基础格式校验 if (string.IsNullOrWhiteSpace(input) || input.Length != 6) return false; // 拆分转换年份、周数 if (!int.TryParse(input.Substring(0, 4), out int year) || !int.TryParse(input.Substring(4, 2), out int week)) return false; // 计算当年实际最大周数 DateTime lastDayOfYear = new DateTime(year, 12, 31); Calendar cal = CultureInfo.InvariantCulture.Calendar; int maxWeek = cal.GetWeekOfYear(lastDayOfYear, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); return week >= 1 && week <= maxWeek; }
内容的提问来源于stack exchange,提问作者LouraQ
相关产品推荐
相关产品推荐

