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

JavaScript文件夹名称正则表达式问题:验证始终返回yes

问题分析与修正

你的正则表达式确实存在错误,导致无法正确限制文件夹名称的总长度,才会出现超长字符串依然返回“yes”的情况。

原正则的核心问题

原表达式 /^[a-zA-Z0-9]+([a-zA-Z0-9_ -]){0,20}$/ 的逻辑漏洞:

  1. 未限制总长度:开头的[a-zA-Z0-9]+是匹配1个及以上的字母/数字,这部分长度没有上限,哪怕开头就有100个数字,只要后面跟着的允许字符不超过20个,正则就会判定匹配,完全无视了你“总长度最大20”的要求。
  2. 长度计算错误:就算忽略开头的无限匹配,[a-zA-Z0-9]+(至少1个)加上后面的{0,20}(最多20个),总长度会允许到21,也不符合最大20的限制。

修正后的正则方案

推荐两种简洁的修正方式:

方式1:直接控制字符数量

明确要求开头1个字母/数字,后面最多跟19个允许字符,总长度刚好控制在1~20:

var regex = /^[a-zA-Z0-9][a-zA-Z0-9_ -]{0,19}$/;

方式2:用正向预查明确长度限制

如果想更直观体现总长度要求,可以搭配正向预查:

var regex = /^(?=.{1,20}$)[a-zA-Z0-9][a-zA-Z0-9_ -]*$/;
  • (?=.{1,20}$):提前校验整个字符串长度在1~20之间
  • [a-zA-Z0-9]:保证开头是字母或数字
  • [a-zA-Z0-9_ -]*:后面可跟任意数量(含0)的允许字符,配合预查限制总长度

测试修正后的代码

用你的测试字符串验证,现在会正确返回“no”:

var regex = /^[a-zA-Z0-9][a-zA-Z0-9_ -]{0,19}$/;
var newName = "12345678901234567890233_pm";
if (regex.test(newName)) {
    console.log('yes');
}else{
    console.log('no'); // 输出no,符合预期
} 

内容的提问来源于stack exchange,提问作者Dev Dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:18:49