Давайте пройдемся по требованиям:
- Каждое имя / слово должно начинаться с заглавной буквы : использовать
\p{Lu}
- Имена / Слова, разделенные пробелами : Используйте
\s+
(1 или более пробелов) / \s
(только один пробел) - Каждое имя / слово длиной не более 3 символов : таким образом, шаблон слова будет
\p{Lu}\p{L}{2,}
- начиная с заглавной буквы, а затем имея 2 или более букв - и предложение или текстовое поле не может быть длиннее 20 символов : использовать положительный прогноз сразу после
^
/ \A
(начало строки): (?!.{21})
или (?=.{0,20}$)
.
Полученное регулярное выражение будет выглядеть как
^(?!.{21})\p{Lu}\p{L}{2,}(?:\s\p{Lu}\p{L}{2,})*$
^(?=.{0,20}$)\p{Lu}\p{L}{2,}(?:\s\p{Lu}\p{L}{2,})*$
Или, если между словами может быть 1+ пробелов
^(?!.{21})\p{Lu}\p{L}{2,}(?:\s+\p{Lu}\p{L}{2,})*$
^(?=.{0,20}$)\p{Lu}\p{L}{2,}(?:\s+\p{Lu}\p{L}{2,})*$
ПРИМЕЧАНИЕ : Если вы когда-нибудь протестируете его на строке, которая может заканчиваться символом \n
, символом новой строки, замените $
на \z
.
См. Демонстрационную версию regex .
Подробности
^
- начало строки (?=.{0,20}$)
- в строке должно быть от 0 до 20 символов без перевода строки до конца \p{Lu}
- заглавная буква \p{L}{2,}
- две или более букв (?:\s\p{Lu}\p{L}{2,})*
- 0 или более повторений: \s
- пробел (или 1 + пробелы, если используется \s+
) \p{Lu}\p{L}{2,}
- заглавная буква, а затем любые две или более букв
$
- конец строки (\z
- это самый конец строки).