首页 文章

正则表达式匹配模式,也限制字符的数量

提问于
浏览
0

我有正则表达式匹配模式的问题,也限制字符的数量:

例如,我允许使用数字前缀: 2, 31, 32, 35, 37, 38, 39, 41, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60

然后我只想要数字和整数的最大长度等于9.所以例如数字如: 255555555 将是好的但 31555555555555555 将不会 .

这是我试图解决这个问题,但它不能正常工作:

^( (2|31|32|35|37|38|39|41|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60)+[0-9]* ){9}$

3 回答

  • 1

    您可以先测试长度,然后测试前缀 .

    function check(s) {
        return /(?=^\d{1,9}$)^(2|3[125-9]|4[16-9]|5.|60)/.test(s);
    }
    
    console.log(['255555555', '31555555555555555', '33', '5a', '5', '50'].map(check));
    
  • 5

    使用正向前瞻来限制(但不匹配)前缀,然后恰好匹配9位数:

    ^(?=2|31|32|35|37|38|39|41|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60)\d{9}$
    
  • 1

    您可以使用此正则表达式:

    (^2\d{0,8}$)|(^(31|32|35|37|38|39|41|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60)\d{0,7}$)
    

    这是 live example .


    如果您不是通过某个地方的数字生成此正则表达式,则可以将其减少为:

    (^2\d{0,8}$)|(^(3[125689]|4[16789]|5[0-9]|60)\d{0,7}$)
    

    这是 live example .

相关问题