C#中如何判断字符串是否以8个字符结尾 实现Pastebin链接校验
Pastebin链接校验功能修正实现
问题定位
当前代码中m.EndsWith($"8 letters")的逻辑完全无效:该方法的作用是判断字符串是否以字面量"8 letters"结尾,并非识别“末尾存在8个任意有效字符”的规则,因此校验逻辑永远无法触发预期分支。
核心实现思路
不需要依赖EndsWith做无意义的字面匹配,按照链接的固定结构拆解校验规则即可:
- 先做基础空值校验,避免用户输入空内容时程序抛出空引用异常
- 保留原有的前缀匹配逻辑,确认输入字符串以
https://pastebin.com/开头 - 固定前缀
https://pastebin.com/的本身长度为21,加上要求的末尾8个有效字符,合法链接的总长度固定为29。只要输入字符串满足这个长度条件,就自然保证末尾刚好是8个字符,不存在多余路径、查询参数或长度不足的问题。
如果需要更严谨的格式校验(排除包含特殊字符的不合法ID),可以用正则一次性完成全字符串匹配,减少零散判断的疏漏。
基础版修正代码
using System; using System.Net; Console.WriteLine("Paste URL:"); string? m = Console.ReadLine(); const string PastePrefix = "https://pastebin.com/"; // 全链路校验:非空、匹配前缀、总长度符合要求 if (!string.IsNullOrWhiteSpace(m) && m.StartsWith(PastePrefix) && m.Length == PastePrefix.Length + 8) { // 直接按前缀长度截取后面的8位ID,避免硬编码偏移量带来的维护问题 string pasteId = m[PastePrefix.Length..]; Console.WriteLine(new WebClient().DownloadString($"http://pastebin.com/raw/{pasteId}")); } else { Console.WriteLine("输入的Paste链接格式无效"); }
增强版严格校验方案
如果需要限制末尾8个字符必须为PasteID支持的合法格式(大小写字母、数字,无特殊符号),可将判断条件替换为正则匹配,一步覆盖所有规则:
using System; using System.Net; using System.Text.RegularExpressions; Console.WriteLine("Paste URL:"); string? m = Console.ReadLine(); // 正则规则:从字符串起始位置匹配固定前缀,后跟恰好8位大小写字母/数字,直到字符串结束 var validPasteRegex = new Regex(@"^https://pastebin.com/[a-zA-Z0-9]{8}$"); if (!string.IsNullOrWhiteSpace(m) && validPasteRegex.IsMatch(m)) { string pasteId = m["https://pastebin.com/".Length..]; Console.WriteLine(new WebClient().DownloadString($"http://pastebin.com/raw/{pasteId}")); }
内容的提问来源于stack exchange,提问作者user15349052
相关产品推荐
相关产品推荐

