如何限制字符串长度

时间:2016-02-16 10:29:09

标签: javascript regex

我有以下正则表达式:

^[a-zA-Z_][\-_a-zA-Z0-9]*

我需要将它的长度限制为39个字符。我尝试了以下但是没有用:

^[a-zA-Z_][\-_a-zA-Z0-9]*{,38}

3 个答案:

答案 0 :(得分:3)

您只需要使用有限的量词{0,38}和字符串锚$的结尾:

^[a-zA-Z_][-_a-zA-Z0-9]{0,38}$
                       ^^^^^ ^

有限量词的语法是{min,max},其中max参数是可选的,但应该存在最小值。如果没有$,您可以在更长的字符串中匹配39个第一个字符。

当它被放置在字符类的开头时,你不必转义连字符(因此,我建议删除它)。

此外,您可以使用/i修饰符进一步缩短正则表达式:

/^[a-z_][-_a-z0-9]{0,38}$/i

甚至

/^[a-z_][-\w]{0,38}$/i

关于评论中的问题:

  

该版本的作品(^[a-zA-Z_][-_a-zA-Z0-9]){0,39}$还有39个字符的限制吗?

正则表达式匹配

  • (^[a-zA-Z_][-_a-zA-Z0-9]){0,39} - 0到39 序列 ...
    • ^ - 字符串的开头
    • [a-zA-Z_] - 指定范围内的单个字符
    • [-_a-zA-Z0-9] - 指定范围内的单个字符
  • $ - 字符串结尾

因此,您需要匹配以包含字符串开头的序列。请注意,字符串的开头只能匹配一次。当你让这些序列的数量为0时,你只匹配字符串末尾的位置或像A-这样的2个字符的字符串。

让我们看看正则表达式对Word input的作用。它使用^计算字符串的开头,然后使用W计算[a-zA-Z_],然后使用o计算[-_a-zA-Z0-9]。然后该组结束,这相当于匹配该组一次。由于我们可以匹配更多序列,因此正则表达式会尝试将r^匹配。它失败。因此,下一个位置会以相同的方式重试并失败,因为d不是^(字符串的开头)。这样就可以匹配字符串的结尾,因为^[a-zA-Z_][-_a-zA-Z0-9]出现了0次,并且字符串$结束了。

请参阅regex demo

答案 1 :(得分:1)

^[a-zA-Z_][\-_a-zA-Z0-9]{0,38}$

[0,38]表示匹配[\-_a-zA-Z0-9]的字符实例数可以是0到38。

答案 2 :(得分:0)

如果您限制输入字段输入,我会添加此内容。

虽然不是正则表达式,但我使用此功能并且效果很好(我将补充一点,让用户知道您从UI / UX的角度限制输入长度非常重要):

limitLength: function(element, lengthOf){
    var fieldLength = element.value.length;
    if(fieldLength <= lengthOf){
        return true;
    } else {
        var str = element.value;
        str = str.substring(0, str.length - 1);
        element.value = str;
    }
}

用法:

<input type="text" onInput="my.namespace.limitLength(this,39)">