Попробуйте с очень простым регулярным выражением.
^([-0][0-1][0-9][0-9][0-9])$|^([-0]20[0-4][0-9])$|^([-0]205[0-5])$
Визуальное представление
[/g0]
Это очень просто понять.
[-0][0-1][0-9][0-9][0-9]
будет охватывать [-1999, 1999] значения [-0]20[0-4][0-9]
будет охватывать [-2000, -2049] и [2000,2049] значения [-0]205[0-5]
будут отображаться [-2050, -2055] и [2050, 2055] значения blockquote>
String.format("%05d", number)
делают очень хорошоПример кода: (Читайте встроенные комментарии для большей ясности.)
int[] numbers = new int[] { -10002, -3000, -2056, -2055, -2000, -1999, -20, -1, 0, 1, 260, 1999, 2000, 2046, 2055, 2056, 2955, 3000, 10002, 123456 }; //valid range -2055 to 2055 inclusive Pattern p = Pattern.compile("^([-0][0-1][0-9][0-9][0-9])$|^([-0]20[0-4][0-9])$|^([-0]205[0-5])$"); for (int number : numbers) { String string = String.format("%05d", number); Matcher m = p.matcher(string); if (m.find()) { System.out.println(number + " is in range."); } else { System.out.println(number + " is not in range."); } }
output:
-10002 is not in range. -3000 is not in range. -2056 is not in range. -2055 is in range. -2000 is in range. -1999 is in range. -20 is in range. -1 is in range. 0 is in range. 1 is in range. 260 is in range. 1999 is in range. 2000 is in range. 2046 is in range. 2055 is in range. 2056 is not in range. 2955 is not in range. 3000 is not in range. 10002 is not in range. 123456 is not in range.