JavaScript实现Check same case函数提交测试失败求助
问题分析与解决
你的代码问题出在正则表达式[A-z]的范围错误上。
ASCII编码里,大写字母Z的编码是90,小写字母a的编码是97,这两者之间还包含了^、_、]等非字母字符。所以当输入^或]时,a.match(/[A-z]/g)会返回匹配结果,导致你的第一个判断条件!a.match(/[A-z]/g)不成立,不会返回-1,而是进入后续分支,最终返回0,不符合需求。
修正方案很简单,把判断字母的正则从[A-z]改成[A-Za-z],这个范围才是严格的大小写字母区间:
function sameCase(a, b) { if (!a.match(/[A-Za-z]/g) || !b.match(/[A-Za-z]/g)) { return -1 } else if ((a.match(/[A-Z]/g) && b.match(/[A-Z]/g)) || (a.match(/[a-z]/g) && b.match(/[a-z]/g))) { return 1 } else { return 0 } }
另外,也可以用更简洁的方式判断字符是否为字母,比如利用字符串的toUpperCase()/toLowerCase()方法对比原字符,或者使用Unicode字符类\p{L}(需要加u标志,比如/^\p{L}$/u),不过[A-Za-z]在这个场景下已经足够可靠。
修正后测试sameCase("^","B")和sameCase("]","D")都会正确返回-1,符合题目要求。
内容的提问来源于stack exchange,提问作者Kyouma
相关产品推荐
相关产品推荐

