开发字符串验证函数:确保7个短横线后均有有效值
解决方案:验证分隔字符串的有效性
我来帮你搞定这个验证函数的问题!根据你的需求,我们需要确保字符串被7个短横线分割后,每一段都有非空的有效值——也就是说整个字符串应该被分成8个非空部分,不能有连续短横线或者开头/结尾的短横线。
方法一:正则表达式(简洁高效)
正则表达式可以直接匹配符合要求的字符串格式,一步到位:
function validateString(x) { // 先确保输入是字符串类型,避免非字符串参数导致异常 if (typeof x !== 'string') { return 'invalid'; } // 正则规则:8个非空段,用7个短横线分隔 const validFormat = /^[^-]+(?:-[^-]+){7}$/; return validFormat.test(x) ? 'valid' : 'invalid'; }
正则规则解释:
^:匹配字符串开头[^-]+:匹配至少一个不是短横线的字符(确保每段非空)(?:-[^-]+){7}:重复7次「短横线+非空段」的组合(刚好对应7个分隔符)$:匹配字符串结尾
方法二:分割数组检查(直观易读)
如果你觉得正则不够直观,也可以把字符串分割成数组后,逐一检查每一项:
function validateString(x) { if (typeof x !== 'string') { return 'invalid'; } const segments = x.split('-'); // 两个条件:分割后刚好8段,且每一段都非空(如果要排除空格可以加.trim()) const isValid = segments.length === 8 && segments.every(seg => seg !== ''); return isValid ? 'valid' : 'invalid'; }
测试用例验证
- 有效输入:
validateString("4-D-5240-P43-120-08A2-8123-0000")→ 返回valid - 无效输入:
validateString("4--5220--120-08C2-8072-")→ 返回invalid(存在空段和结尾短横线)
为什么你的旧函数会报错?
大概率是你直接访问了分割后数组的索引(比如segments[7]),但当输入格式错误时,数组长度不足8,访问不存在的索引会导致undefined相关的错误。上面两种方法都会先做合法性检查,避免了这类异常。
内容的提问来源于stack exchange,提问作者Jason Kelly
相关产品推荐
相关产品推荐

