修复仅校验连字符、空格、大写字母及数字的字符串验证方法异常
问题原因
原代码存在3个核心逻辑错误:
- 校验逻辑完全颠倒:需求是校验所有字符都属于指定合法类型,但原代码只要遍历到第一个合法字符就直接
return true,完全不会校验后续字符,这是第5位出现非法字符仍返回true的根本原因。 - 字符比较类型不匹配:
c.Equals("-")中变量c是char类型,"-"是字符串类型,类型不一致导致该判断永远为假,合法字符'-'会被误判为非法。 - 循环终止逻辑错误:遇到第一个非法字符时仅执行
break跳出循环后返回false,刚好和需求逻辑相反。
修正后代码
public bool CarLicensePlateCheck(string m) { // 先校验长度是否符合要求 if (m.Length < 4 || m.Length > 12) { return false; } // 遍历所有字符,遇到非法直接返回false foreach(char c in m) { if (!(char.IsDigit(c) || char.IsUpper(c) || char.IsWhiteSpace(c) || c == '-')) { return false; } } // 所有字符都校验通过才返回true return true; }
逻辑说明
- 先判断字符串长度是否在4-12区间,不符合直接返回false
- 遍历每个字符,只要存在任意一个字符不符合合法规则,直接返回false
- 所有字符都完成校验且全部合法,才返回true
内容的提问来源于stack exchange,提问作者NitroSage
相关产品推荐
相关产品推荐

