Это плохая практика писать встроенные обработчики событий

Да

Точно так же, как + означает, что один или несколько вы можете использовать {3,30} для соответствия между 3 и 30

Например, [a-z]{3,30} соответствует от 3 до 30 строчных буквы алфавита

Из документации класса Pattern

X{n,m}    X, at least n but not more than m times
blockquote>

В вашем случае соответствовало 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. Это более читаемо.

58
задан Homam 31 October 2010 в 15:41
поделиться