2010-04-19 5 views
6

나는 그것이는 preg_match에 의해 다음과 같은 정규 표현식()와 함께 작동하도록 얻을 수가 없습니다 :PHP에서 음수가 아닌 정수와 일치하는 정규식?

@^(?:[1-9][0-9]*)|[email protected] 

을하지만 그것이 일치 이상한 '-0', 고려가 더 '-'모든 정규 표현식에 허용했다. 왜?

무엇보다 이상한 것은 당신이 나눈 부분 전환하는 경우 | : 등

@^0|(?:[1-9][0-9]*)[email protected] 

그것은 같은 '-2'와 '-10'모든 음의 정수를 일치

무엇 오전 내가 누락 된거야? 음수가 아닌 정수에 대한 더 좋은 정규 표현식?

답변

5

귀하의 정규식 : @^(?:[1-9][0-9]*)|[email protected]

  1. 1-9와 어떤 숫자로 0 또는 번 이상 또는
  2. 경기 0로 끝나는 그 숫자를 따라 시작하는 번호와 일치했다.

분명히 -0은 조건 2를 만족하므로 일치 항목을 얻을 수 있습니다.

당신이 필요로하는 정규식은 다음과 같습니다 0 또는 0을 선도하지 않고 다른 +ve 번호와 일치 @^(?:[1-9][0-9]*|0)[email protected]

. 선행 0이 허용되는 경우 입력에 사용 가능한 숫자가 들어 있는지 확인해야합니다. 표식으로 ^\d+$을 언급하십시오.

if($input >= 0) 
// $input is non -ve. 
+0

감사 :

또한 왜처럼 간단한 검사를하지! 그것은 작동합니다. :) –

+0

미리보기와 함께 *로 시작하는 *을 확인할 수도 있습니다 (예 : '/^(?! 0) \ d + $/D' ('D' 수정자를 잊지 마세요!) – salathe