Regex 正则表达式-带连字符的字母顺序

Regex 正则表达式-带连字符的字母顺序,regex,Regex,我希望有一个正则表达式来检查字符串是否包含多达14个字母数字字符。可以包括连字符,而不是在开头或结尾 这就是我迄今为止所做的: var patt = new RegExp("^([a-zA-Z0-9]+(-[a-zA-Z0-9])*){1,14}$"); 但它不起作用- 有什么想法吗?您需要使用正向前瞻(使用可选连字符计算字母数字字符数) 如果只允许使用单连字符: ^(?=([a-zA-Z0-9]-?){1,14}$)[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)?$ 如果允

我希望有一个正则表达式来检查字符串是否包含多达14个字母数字字符。可以包括连字符,而不是在开头或结尾

这就是我迄今为止所做的:

var patt = new RegExp("^([a-zA-Z0-9]+(-[a-zA-Z0-9])*){1,14}$");
但它不起作用-


有什么想法吗?

您需要使用正向前瞻(使用可选连字符计算字母数字字符数)

如果只允许使用单连字符:

^(?=([a-zA-Z0-9]-?){1,14}$)[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)?$

如果允许使用多个连字符:

^(?=([a-zA-Z0-9]-?){1,14}$)[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$

附加选项:

^[a-zA-Z0-9](?:-?[a-zA-Z0-9]){0,13}$


这里有一个简单的解决方案,由于它不使用lookaheads,因此速度更快:

^[A-Za-z0-9](?:[-A-Za-z0-9]{0,12}[A-Za-z0-9])?$

它是如何工作的?

  • 与您的原始模式一样,此正则表达式固定在
    ^
    $
    之间,强制执行我们对字符数的限制
  • 第一个字符必须是字母或数字
  • 包含在<代码>(?:< /COD>非捕获组)中的字符串的其余部分,在结尾处由<代码>?/代码>可选。该字符串的其余部分,如果它在那里(不止一个字符),必须以字母或数字结尾。在中间,可以有0到12个字母、数字或连字符。
  • 可选

    如果希望正则表达式稍微短一点,请启用不区分大小写选项,并删除小写字符或大写字符,例如:

    ^[a-z0-9](?:[-a-z0-9]{0,12}[a-z0-9])?$
    

    为了简单易读,使用两个正则表达式

    首先检查它是否与此匹配:

    /^[A-Za-z0-9-]{1,14}$/
    
    然后检查它是否与此不匹配:

    /^-|-$/
    

    将您的正则表达式更改为这样,然后尝试一次
    /^([a-zA-Z0-9]+([a-zA-Z0-9-]){1,14}$/
    它可以有多个连字符吗?它是否有效
    a-b-c
    ?@Ulugbek Umirov-yes@cheziHoyzer其中一个答案有效吗,或者你还在努力解决吗?请告诉我们。:)这是一个很好的解决方案。您需要在最后一个字符之前添加可选连字符。为什么不
    ^(?!-)[a-z0-9-]{0,13}[a-z0-9]$
    =)@UlugbekUmirov
    这是一个很好的解决方案。
    谢谢,您的也是。:)
    您需要在最后一个字符之前添加可选连字符
    不要这样认为,请参阅@zx81
    123456789-123-4
    不匹配,而它应该匹配。@UlugbekUmirov Ha这是我们对它的不同理解。我假设最大宽度为14。+1--不是我的方法,但它有效,答案解释得很好。:)