Установите минимальные и максимальные символы в регулярном выражении?
Я написал регулярное выражение, которое соответствует любому количеству букв с любым количеством пробелов между буквами. Я хотел бы, чтобы это регулярное выражение также обеспечивало минимальное и максимальное количество символов, но я не уверен, как это сделать (или, если возможно).
Мое регулярное выражение:
[A-Za-z](\s?[A-Za-z])+
Я понял, что это соответствует только двум наборам букв, окружающих одно пространство, поэтому я немного изменил его, чтобы исправить это. Первоначальный вопрос все-таки остается тем же.
Есть ли способ обеспечить минимум трех символов и максимум 30?
Ответы
Ответ 1
Да
Точно так же, как +
означает один или несколько, вы можете использовать {3,30}
для соответствия между 3 и 30
Например, [a-z]{3,30}
соответствует от 3 до 30 строчных букв алфавита
Из документации класса шаблона
X{n,m} X, at least n but not more than m times
В вашем случае сопоставление 3-30 букв с последующими пробелами может быть выполнено с помощью
([a-zA-Z]\s){3,30}
Если вам требуется пропустить пробелы, если вы этого не сделаете, вы можете использовать: (2-29 раз букву + пробел, затем букву)
([a-zA-Z]\s){2,29}[a-zA-Z]
Если вы хотите, чтобы пробелы считались символами, вам нужно разделить это число на 2, чтобы получить
([a-zA-Z]\s){1,14}[a-zA-Z]
Вы можете добавить \s?
к последнему, если конечный пробел является необязательным. Все они были протестированы на RegexPlanet
Если вы хотите, чтобы вся строка в целом составляла от 3 до 30 символов, вы можете использовать lookaheads, добавляя (?=^.{3,30}$)
в начале RegExp и удаляя ограничения других размеров
Все, что сказал, честно говоря, я бы просто испытал свойство String
.length
. Это более читаемо.
Ответ 2
Это то, что вы ищете
^[a-zA-Z](\s?[a-zA-Z]){2,29}$
^
- начало строки
$
- это конец строки
(\s?[a-zA-Z]){2,29}
будет соответствовать (\ s? [a-zA-Z]) от 2 до 29 раз.
Ответ 3
Фактически Benjamin ответ приведет к полному решению вопроса OP.
Используя lookaheads, можно ограничить общее количество символов и ограничить соответствие заданной комбинацией букв и (необязательных) одиночных пробелов.
Регулярное выражение, которое решает всю проблему, станет
(?=^.{3,30}$)^([A-Za-z][\s]?)+$
Это будет соответствовать AAA
, A A
, а также не будет соответствовать AA A
, так как есть два последовательных пробела.
Я тестировал это на http://regexpal.com/, и это делает трюк.
Ответ 4
вы должны использовать
[a-zA-Z ]{20}
[для допустимых символов] {для ограничения количества символов}