2012-01-06 3 views
1

현재 입력 영역으로 텍스트 영역이 있으며 3 줄 이상의 줄이 있는지 확인하고자합니다.Regex : 텍스트 영역 입력의 최소 줄 바꿈 수를 확인하십시오.

저는 Yii 프레임 워크를 사용하기 때문에 model에 대해 유효성을 검사하기 위해 validate() 메서드를 사용하고 있습니다.

Yii에서 유효성 검사를 수행하면서 정규식을 사용하여 입력이 유효한지 확인하기 위해 일치 기능을 사용하려고했습니다.

현재 내가 가진 :

array('ingredients', 'match', 'pattern'=> '/(\n|\r\n|\r){3,}/'), 

작동하지 않습니다, 나는 그것이 제대로 작동 3 1로 변경 그러나합니다.

어떻게 정규식을 사용하여 최소한 3 줄이 있는지 확인할 수 있습니까?

+2

'substr_count ($ string, "\ n")> = 3'은 나에게 훨씬 더 합리적인 것처럼 보입니다. Yii는 이와 같은 사용자 지정 유효성 검사 기능을 허용합니다. – deceze

+1

세 줄은 두 번 나누기 (세 개가 아님)입니다. – hakre

+0

@deceze Yii 프레임 워크는 하루 종일 액세스 할 수 없었지만이를 확인할 계획이었습니다. – BongoFlat

답변

1

세 줄은 세 개가 아니라 두 번 나누기입니다. 따라서 찾고자하는 숫자는 2입니다.

그러면 정규 표현식이 첫 번째 표현식과 일치합니다. 따라서 \r\n을 첫 번째 하위 패턴으로 사용하여 \n\r을 두 줄 바꿈 시퀀스로 잡는 것을 방지해야합니다.

그런 다음 반복되는 줄 바꿈을 찾습니다. 그러나 빈 줄 이상의 것을 허용하고 싶습니다.

아마이 패턴은 필요에 맞게됩니다

/^(?:.*(?:\r\n|\n|\r)){2,}/ 

그것은 세 이상 (비어 비어) 라인을 수 있습니다.

0

당신은뿐만 아니라 그 라인의 내용과 일치해야합니다

array('ingredients', 'match', 'pattern'=> '/(.*(\n|\r\n|\r)){3,}/'), 
1

귀하의 정규 표현식

/(\n|\r\n|\r){3,}/ 

세 개의 연속 줄 바꿈이 있다는 것을 의미한다. 그 사이에 다른 문자를 허용하십시오 (예 :

/((\n|\r\n|\r).*){3,}/