Ответ 1
Вы можете просто использовать шаблон *\d* *
с ограничительным (?=.{6}$)
lookahead:
^(?=.{6}$) *\d* *$
Смотрите демонстрацию regex
Пояснение:
-
^
- начало строки -
(?=.{6}$)
- строка должна содержать только 6 символов, кроме новой строки -
*
- 0 + регулярные пробелы ( ПРИМЕЧАНИЕ для соответствия горизонтальному пространству - используйте[^\S\r\n]
) -
\d*
- цифры 0+ -
*
- 0 + регулярные пространства -
$
- конец строки.
Java-демонстрация (последние 4 - это тестовые примеры, которые должны потерпеть неудачу):
List<String> strs = Arrays.asList("123456", "12345 ", " 23456", " 5", // good
"1 ", " ", " 2 ", " 2345 ", // good
"12 456", "1234 6", " 1 6", "1 6"); // bad
for (String str : strs)
System.out.println(str.matches("(?=.{6}$) *\\d* *"));
Обратите внимание, что при использовании в String#matches()
вам не нужны строковые привязки ^
и final $
, так как метод требует полного соответствия строк, привязывая шаблон по умолчанию.