2014-09-29 34 views
2

我需要驗證串2個基團,其是分離的與一個空間與下一個規則:棘手的正則表達式的驗證

  • 每組需要是至少2個字符的長,但小於或等於15

  • 兩組一起不能超過20個字符長(不包括空間)

  • 組只能包含字母(這是簡單的,它是〔A-ZA-Z])

遵循這些規則,這裏是一些例子

  • 名字姓氏(有效)

  • Somename T(無效,第二一種是< 2)

  • Somethingsomettt這裏(無效的,第一個是> 15)

  • Somethingsome Somethingsome(Invalid,total> 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最接近一個吧。不過,謝謝@popovitsj和@Avinash Raj。

+0

爲什麼不分開中間的空間,並分別驗證兩個部分?這可以讓你輕鬆檢查組合長度。 – ajp15243 2014-09-29 18:43:36

+0

是否有一個原因,你必須使用一個正則表達式來做到這一點? – 2014-09-29 18:44:25

+2

看起來你在第一個字符類('[a-z-A-Z]')中間有一個額外的'-'。 – ajp15243 2014-09-29 18:47:20

回答

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 – 2014-09-29 18:55:16

+0

謝謝,修改它爲'^(?= [a-zA-Z] {4,21} $)[a -zA-z] {2,15} [a-zA-Z] {2,15} $'這似乎符合我的需要。 – 2014-09-29 18:55:50

+0

@Flyer是否想要匹配'Somethings Somethings'? – 2014-09-29 18:57:31