2014-09-29 3 views
2

мне нужно проверить строку с 2 группами, которые разделены одним пробелом со следующими правилами:Хитрый регулярное выражение проверки

  • Каждая группа должна быть по крайней мере, 2 символов длиной, но меньше или равен 15

  • Обе группы вместе не могут быть длиной более 20 символов (не считая пространства)

  • группы могут содержать только буквы (это просто, это [A-Za-Z])

Следуя этим правилам, вот некоторые примеры

  • Имя Фамилия (Valid)

  • SomeName T (Invalid, второй один < 2)

  • Somethingsomettt Здесь (Invalid, первый -> 15)

  • Somethingsome Somethingsome (Недействительный, всего> 20)

Было бы просто [a-zA-Z]{2,15} [a-zA-Z]{2,15}, если бы не было, что 2 + 2 = < < общая = 20 состояние.

Можно ли даже ограничить его таким образом? Если это - как?

UPDATE Только ради этого, в результате регулярных выражений должен был быть ^(?=[a-zA-Z ]{5,21}$)[a-zA-z]{2,15} [a-zA-Z]{2,15}$, @vks был ближе всего к нему один. Тем не менее, спасибо @поповиц и @ Авинаш Радж тоже.

+0

Почему бы не разделить на пространстве в середине, так и отдельно проверять обе части? Это позволит вам тривиально проверить общую длину. – ajp15243

+0

Есть ли причина, по которой вам нужно сделать это с помощью одного регулярного выражения? –

+2

Похоже, у вас есть дополнительный '-' в середине вашего первого класса символов (' [a-z-A-Z] '). – ajp15243

ответ

1

Вы можете попробовать ниже регулярное выражение, которое использует отрицательный предпросмотр,

(?!^.{22,})^[a-zA-Z]{2,15} [a-zA-Z]{2,15}$ 

DEMO

1

Это можно сделать с помощью опережающего просмотра. Что-то вроде этого:

^(?=.{1,20}$)[a-zA-z]{2,14} [a-zA-Z]{2,14}$ 
+0

Вам нужно включить стартовый якорь .. см. Http://regex101.com/r/kL1bL8/3 –

+0

Спасибо, изменил его на '^ (? = [A-zA-Z] {4,21} $) [a -zA-z] {2,15} [a-zA-Z] {2,15} $ ', который, похоже, работает, как мне нужно. –

+0

@Flyer вы хотите совместить 'Somethings Somethings'? –

Смежные вопросы