2012-03-14 2 views
1

입력 한 분을 확인하기 위해 다음 스크립트를 사용하고 있습니다 ... 숫자와 쉼표를 올바른 형식으로 만 사용할 수 있습니다 ... 그러나 길이 제한을 추가하고 싶습니다제한 표현 길이

(!preg_match("#^(\d{1,3}(\,\d{3})*|(\d+))$#",$values['minutes'])) 

난에이를하고 싶습니다 : 제한 없음 함께뿐만 아니라 ... 내가 할 수없는 것 또는 그냥 잘못 자리를 ITIN 가져온 거에요 ... 여기에 코드입니다 최소 5 개까지 ... 항목은 하루에 온라인으로 몇 분 동안 ... 잘 하루에 1440 분이 있습니다 ... 당신이 1,440을 입력하면 현재 유효한 5 자이고 제한하고 싶습니다. 그 표현은 ...

누구?

답변

1

두 가지 제안 :

preg_match("#^(?:\d{1,3}|1,?\d{3})$#" 

설명 :이 또한 1,999 수 있다는 여전히 여분의 전성 검사를 필요 했어 그래서

^  # Start of string 
(?:  # Either match... 
\d{1,3} # a three-digit number 
|  # or 
1  # a four digit number that starts with a 1 
,?  # and may have a thousands separator 
\d{3} # (and three more digits) 
) 
$  # End of string 

문제는, 물론입니다. 이것은 아마도 더 나은 해결책 일 것입니다.

당신은 또한 정규식 자체의 범위를 제한 할 수 있지만 그 성가신 :

preg_match("#^(?:1,?440|1,?4[0-3]\d|1,?[0-3]\d{2}|[1-9]\d{1,2}|\d)$#" 

설명 :

^    # Start of string 
(?:    # Either match... 
1,?440   # 1440 
|    # or 
1,?4[0-3]\d  # 1400-1439 
|    # or 
1,?[0-3]\d{2} # 1000-1399 
|    # or 
[1-9]\d{1,2} # 10-999 
|    # or 
\d    # 0-9 
) 
$    # End of string 
+0

+1 전체 표현을 향상시킵니다. – stema

+0

이렇게하면 안된다고 생각합니다. 제대로 작동합니다. 감사합니다. – user756659

0

당신은 테스트 오프 아마 더 좋을 것 같아 문자열의 길이 또는 심지어 정수 값. 그러나 단지 그것이 가능하다고 보여 :

preg_match("#^(\d,\d{3}|\d{1,4})$#") 

예, 그것은 매우 간단합니다, 네 자리 숫자 만 형태 중 하나

  • 하나의 숫자, 쉼표, 세 자리를 취할 수 있기 때문에
  • 4 자리 숫자