JavaScript中的Regex可选字符集

JavaScript中的Regex可选字符集,javascript,regex,Javascript,Regex,我想用以下条件验证名称数据文件 名称包含数字0到9,而不是所有数字 名称可以包含连字符-,前提是它不是第一个或最后一个 名称字符 名称必须包含2个字符,其余字符是可选的 所以我尝试了下面的正则表达式 const regExp = /^[a-zA-Z0-9]+[a-zA-Z_-]+[a-zA-Z0-9]$/; 我需要至少两个字符,其余字符在regExp中是可选的 除了这个代码> [AZ-ZO-9] 之外,所有的工作都很好,最后,我想让这个可选的 < P>你可以考虑使用< /P> /^

我想用以下条件验证名称数据文件

  • 名称包含数字0到9,而不是所有数字
  • 名称可以包含连字符-,前提是它不是第一个或最后一个 名称字符
  • 名称必须包含2个字符,其余字符是可选的
所以我尝试了下面的正则表达式

    const regExp = /^[a-zA-Z0-9]+[a-zA-Z_-]+[a-zA-Z0-9]$/;
我需要至少两个字符,其余字符在regExp中是可选的 除了这个代码> [AZ-ZO-9] 之外,所有的工作都很好,最后,我想让这个可选的

< P>你可以考虑使用< /P>
/^(?=.{2})(?![^a-zA-Z]+$)[a-zA-Z0-9]+(?:[_-][a-zA-Z0-9]+)*$/

详细信息

  • ^
    -字符串的开头
  • (?=.{2})
    -至少两个字符
  • (?![^a-zA-Z]+$)
    -字符串不能没有ASCII字母
  • [a-zA-Z0-9]+
    -1+ASCII alnum字符
  • (?:[-][a-zA-Z0-9]+)*
    -0个或多个
    \u
    -
    序列,后跟1+ASCII alnum字符
  • $
    -字符串结束

  • 你需要这个:
    /^[a-zA-Z0-9][a-zA-Z-]*[a-zA-Z0-9]$/
    这个“不能都是数字”的规定使得这个正则表达式很难理解。
    /^(?=.{2})(?!\d+$)[a-zA-Z0-9]+(?:[-][a-zA-Z0-9]+])*$/
    是一个有效的名称吗?如果是,那么@WiktorStribiżew就有了解决方案。然后更好的解决方案是需要一个字母-
    /^(?=.{2})(?![^a-zA-Z]+$)[a-zA-Z0-9]+(?:[[u-][a-zA-Z0-9]+)*$/