2011-01-27 5 views
5

문자열 유효성 검사를 위해 정규 표현식이 필요합니다. 문자열은 비어 있거나 5 자리 숫자를 가질 수 있으며 9 자리 숫자를 가질 수 있습니다. 다른 상황은 유효하지 않습니다. 다음 정규식을 사용하고 있습니다 :PHP 정규식 자릿수 만 5 또는 9

/\d{5}|\d{9}/ 

그러나 작동하지 않습니다.

+2

'/^(\ d {5}) (\ d {4})?) $ /'? 숫자가 문자열에서 유일한 것으로 가정하면, 5 자리 숫자와 일치하며, 4 자리수를 선택적으로 따라 올 수 있습니다. –

+0

@MarcB : 구문 상 유효하지도 않습니다. –

+0

퀴어 리언, 빈 문자열이 뭐라 말할까요? – sln

답변

16

그냥 Marc B said in the comments로,이 정규 표현식을 사용합니다 (그룹을 선택적으로 만드는 숫자 식 주변의 ? 한정 기호에 유의하십시오).

이 패턴의 다른 점은 교대로 다른 패턴과 반대되는 점입니다. 5 자리가 일치하지 않으면 백 트랙킹이 필요하지 않습니다.

1

"작동하지 않는다"는별로 도움이되지 않습니다. 하지만 이런 식으로되지 않을까요?

/^(\d{5}|\d{9}|)$/ 

(비트 정규 표현식에 녹슨,하지만 난 후, "다음 5 자리 또는 9 자리 숫자 또는 아무것도를 시작하면됩니다 종료하려고 해요) 당신은 앵커 ^$를 잊어

3
~^(?:\d{5}|\d{9}|)$~ 

문자열이 없으면 문자열의 시작이나 끝뿐만 아니라 문자열의 어느 위치에서도 문자열이 일치합니다. 또한 빈 문자열을 포함하지 않았습니다.

4

앵커와 빈 문자열을 허용하는 "?"

이 다른 네 자리 (따라서 구 총 자리) 또는 아무 문자 전혀 다음에 할 수있는 중 정확히 5 자리 숫자 일치

/^(\d{5}(\d{4})?)?$/ 

:

/^(\d{5}|\d{9})?$/ 
1

왜 perl 스타일의 정규식을 사용하는지에 대한 답은 왼쪽에서 오른쪽으로 우선 순위가 매겨집니다.

변경 그것에 :

/\d{9}|\d{5}/

/^(\d{5}|\d{9}|)$/

(. 비록,이 당신의 다른 주장이나 뭔가를 고정하지 않는 한 6-8 및 10 무한대 을 아무것도 말하지 않을 것이다)