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

时间:2017-02-09 14:00:43

标签: javascript angularjs regex

我在使用正则表达式来匹配模式时遇到问题,并且还限制了字符的数量:

例如我允许使用数字前缀: 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 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分: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));