Ограничить количество определенных символов в строке
Я хоть и знаком с регулярками и знаю где находится справочная документация, но все же не получается.
Меня интересует как написать регулярку ограничивающую например количество пробелов в строке, причем таким образом что пробелы могу располагаться в любом месте строки. подряд и не подряд
/^[a-zA-Z\s]{8,20}$/
Эта регулярка мне очень нравиться, но она не ограничивает количество пробелов. Строка может состоять вся из пробелов- это нужно пресекать. Я конечно понимаю что могу использовать trimLeft trimRight однако строка вида a b пройдет через трим и все еще будет не приемлема. Желаемая регулярка все еще не найдена. Придется использовать алгоритмическое решение.
Ответы (2 шт):
Используйте
^(?=.{8,20}$)\s*[a-zA-Z]+(?:\s+[a-zA-Z]+)*\s*$
См. пример работы регулярного выражения.
Подробности
^- начало строки(?=.{8,20}$)- в строке должно быть от 8 до 20 символов, отличных от перевода строки (если текст многострочный, добавьте флагs,/^(?=.{8,20}$)\s*[a-zA-Z]+(?:\s+[a-zA-Z]+)*\s*$/s)\s*- ноль и более пробельных символов[a-zA-Z]+- одна и более букв ASCII(?:\s+[a-zA-Z]+)*- ноль и более повторов последовательности ноля и более пробельных символов, за которыми следует одна и более букв ASCII\s*- ноль и более пробельных символов$- конец строки.