我在使用正则表达式来匹配模式时遇到问题,并且还限制了字符的数量:
例如我允许使用数字前缀:
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}$
答案 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));