You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发字符串验证函数:确保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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:14:46